DLL 与用户交互

本文关键字:交互 用户 DLL | 更新日期: 2023-09-27 18:33:23

我正在用 c# .net 开发一个小应用程序。我想以不同的方式使用它。作为窗口窗体应用和命令行应用。所以我有接口项目,我有内部核心 dll 项目。在该 dll 中的某些过程中,我想与用户通信并询问我是否应该继续我的操作。所以。。。通过我的界面项目与用户沟通的更好方式是什么?它是传递给我的 dll 类的某种委托函数还是通过某些服务引用?

DLL 与用户交互

您已经使用了以下术语:

  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 标志。