2013-10-01 26 views
-2

我正在用c#.net開發一個小應用程序。我想以不同的方式使用它。由於Windows窗體應用程序和命令行應用程序。所以我有接口項目,我有內部的核心dll項目。在該DLL的一些程序中,我想與用戶溝通並詢問是否應該繼續我的操作。那麼......哪一種更好的方式通過我的界面項目與用戶進行交流?它會傳遞給我的dll類或通過某些服務引用的某種委託函數?dll與用戶交互

回答

0

你已經使用的術語:

  1. 接口項目
  2. 內部核心 DLL項目

的DLL文件爲什麼應該有任何的商業要求的東西用戶?我會重新考慮整個設計,以便這些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

嗯,你是對的。我想我必須更具體。我需要問一些類似忽略/放棄/重試的內容。那麼你會建議什麼?回調? – user2834447

+0

我已經編輯了我的答案。 –

+0

非常感謝!這就是我想要的! – user2834447