-2
我正在用c#.net開發一個小應用程序。我想以不同的方式使用它。由於Windows窗體應用程序和命令行應用程序。所以我有接口項目,我有內部的核心dll項目。在該DLL的一些程序中,我想與用戶溝通並詢問是否應該繼續我的操作。那麼......哪一種更好的方式通過我的界面項目與用戶進行交流?它會傳遞給我的dll類或通過某些服務引用的某種委託函數?dll與用戶交互
我正在用c#.net開發一個小應用程序。我想以不同的方式使用它。由於Windows窗體應用程序和命令行應用程序。所以我有接口項目,我有內部的核心dll項目。在該DLL的一些程序中,我想與用戶溝通並詢問是否應該繼續我的操作。那麼......哪一種更好的方式通過我的界面項目與用戶進行交流?它會傳遞給我的dll類或通過某些服務引用的某種委託函數?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
標誌。
嗯,你是對的。我想我必須更具體。我需要問一些類似忽略/放棄/重試的內容。那麼你會建議什麼?回調? – user2834447
我已經編輯了我的答案。 –
非常感謝!這就是我想要的! – user2834447