-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