DLL 与用户交互
本文关键字:交互 用户 DLL | 更新日期: 2023-09-27 18:33:23
我正在用 c# .net 开发一个小应用程序。我想以不同的方式使用它。作为窗口窗体应用和命令行应用。所以我有接口项目,我有内部核心 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
标志。