2013-10-01 27 views
-2

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

回答

0

你已经使用的术语:

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

+0

嗯,你是对的。我想我必须更具体。我需要问一些类似忽略/放弃/重试的内容。那么你会建议什么?回调? – user2834447

+0

我已经编辑了我的答案。 –

+0

非常感谢!这就是我想要的! – user2834447