C# dll与用户交互

C# dll与用户交互,c#,dll,user-interaction,C#,Dll,User Interaction,我正在用c#net开发一个小应用程序。我想用不同的方式使用它。作为windows窗体应用程序和命令行应用程序。所以我有接口项目和内部核心dll项目。在该dll中的某些过程中,我希望与用户通信,并询问是否应继续操作。所以通过我的界面项目与用户沟通的更好方式是什么?它是传递给我的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;
    }
    
    public类QueryContinueEventArgs:EventArgs
    {
    public QueryContinueEventArgs(字符串失败文件,验证失败)
    {
    FailedFile=FailedFile;
    失败=失败;
    Continue=false;
    }
    公共字符串失败文件{get;private set;}
    公共异常失败{get;private set;}
    公共继续{get;set;}
    }
    公共事件事件处理程序QueryContinueAfterCopyFailure;
    CopyFailure(字符串文件名,异常失败)后受保护的bool ONQUERYCONTINUEAAFTER
    {
    if(QueryContinueAfterCopyFailure!=null)
    {
    QueryContinueEventArgs e=新QueryContinueEventArgs(文件名,失败);
    QueryContinueAfterCopyFailure(这个,e);
    返回e.继续;
    }
    返回false;
    }
    

    分配的事件处理程序可以提供用户交互,并相应地设置
    Continue
    标志。

    好吧,你是对的。我想我必须更具体一点。我需要问一些问题,比如忽略/中止/重试。那你有什么建议?回电?非常感谢!这就是我想要的!