【问题标题】:dll interact with userdll与用户交互
【发布时间】:2013-10-01 10:34:40
【问题描述】:

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

【问题讨论】:

    标签: c# dll user-interaction


    【解决方案1】:

    您已经使用了这些条款:

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

    【讨论】:

    • 嗯,你是对的。我想我必须更具体。我需要询问诸如忽略/中止/重试之类的问题。那么你有什么建议呢?回调?
    • 非常感谢!这就是我想要的!
    猜你喜欢
    • 1970-01-01
    • 2019-03-14
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多