2013-10-01 2 views
-2

저는 C# .net에서 작은 응용 프로그램을 개발 중입니다. 다른 방식으로 사용하고 싶습니다. Windows는 app 형식으로 명령 줄 앱으로 사용됩니다. 그래서 나는 인터페이스 프로젝트를 가지고 있고 내부 코어 DLL 프로젝트가있다. 해당 DLL의 일부 절차에서 나는 사용자에게 comunicate하고 내 작업을 계속해야하는지 묻습니다. 그렇다면 ... 인터페이스 프로젝트를 통해 사용자와 더 효과적으로 통신하는 방법은 무엇입니까? 그것은 내 dll 클래스 또는 일부 서비스 참조를 통해 전달 된 대리자 함수의 일부 종류가 될 것이라고?dll이 사용자와 대화합니다.

  1. 인터페이스 프로젝트
  2. 내부 핵심 DLL 프로젝트

DLL이 어떤 사업 무언가에 대한 사용자 요청을해야하는 이유 :

답변

0

당신은 이미 용어를 사용? DLL이 실제 작업을 수행 할 수 있도록 전체 디자인을 다시 생각해 보겠습니다. 사용자에게 무엇을 할 것인지 물어 보는 것과 같은 다른 모든 작업은 사용자 인터페이스 프로젝트에서만 수행해야합니다.

DLL이 수행 할 작업을 문의하기 위해 호출 할 수있는 콜백을 만들 수 있지만 호출이 사용자 상호 작용을 제공한다고 가정해서는 안됩니다. 즉, DLL이 정보를 반환 할 때까지 을 알 필요가 없도록 디자인해야합니다. 정보 만 반환됩니다.

예 : DLL 중 하나에 A 폴더에서 B 폴더로 파일을 복사하는 기능이 있다고 가정합니다. 한 파일의 복사가 실패하면 사용자가 중단하거나 다른 모든 파일을 계속 진행할지 여부를 결정해야합니다. 이 같은 이벤트를 만들 수 있습니다

public class QueryContinueEventArgs : EventArgs 
{ 
    public QueryContinueEventArgs(string failedFile, Exeption failure) 
    { 
     FailedFile = failedFile; 
     Failure = failure; 
     Continue = false; 
    } 

    public string FailedFile { get; private set; } 
    public Exception Failure { get; private set; } 
    public Continue { get; set; } 
} 


public event EventHandler<QueryContinueEventArgs> QueryContinueAfterCopyFailure; 

protected bool OnQueryContinueAfterCopyFailure(string fileName, Exception failure) 
{ 
    if (QueryContinueAfterCopyFailure != null) 
    { 
     QueryContinueEventArgs e = new QueryContinueEventArgs(fileName, failure); 
     QueryContinueAfterCopyFailure(this, e); 
     return e.Continue; 
    } 
    return false; 
} 

할당 된 이벤트 핸들러는 사용자 상호 작용을 제공하고 그에 따라 Continue 플래그를 설정할 수 있습니다.

+0

글쎄, 네 말이 맞아. 나는 좀 더 구체적이어야한다고 생각한다. 나는 ignore/abort/retry와 같은 것을 물어볼 필요가있다. 그래서 당신은 무엇을 제안하겠습니까? 콜백? – user2834447

+0

나는 나의 대답을 이미 편집했다. –

+0

고마워요! 그게 내가 원하는 전부 야! – user2834447