c# - 如何使用最少的重复代码编写异步类?

标签 c# asp.net asp.net-mvc winforms asynchronous

如何编写像 WebClient 这样的异步类?

有什么方法可以保持简短,而不必对每种方法都重复?

例如,我有:

Download(string a)
Download(string a, string b)

我是否必须为其中的每一个重写 Async + Complete 方法?

非常感谢。

最佳答案

更新:

此示例适用于 winforms,我相信 OP 询问的是 asp.net。一旦我的评论得到一些反馈,我将修改我的答案。


你猜对了。我发现 .Net 中多线程代码的一种优雅方式是使用 BackgroundWorker类(class)。与在原生 C++ 中实现线程相比,它真的非常简单。

老实说,MSDN 页面上的示例可能有点难以理解,您可以这样总结(伪代码 - 可能无法编译):

private BackgroundWorker bw;

private void foobar() {
  bw = new BackgroundWorker(); // should be called once, in ctor
  bw.DoWork += new DoWorkEventHandler(bw_DoWork);
  bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_Completed);

  int i = 0;
  bw.RunWorkerAsync(i);
}

private void bw_DoWork(object sender, DoWorkEventArgs e) {
  int i = (int)e.Argument;
  i++;
  e.Result = i;
}

private void bw_Completed(object sender, RunWorkerCompletedEventArgs e) {
  if (e.Error != null) {
    MessageBox.Show(e.Error.Message);
  } else {
    int i = (int)e.Result;
    MessageBox.Show(i.ToString());
  }
}

至于将重复代码保持在最低限度,我想您可以对所有方法使用相同的后台工作程序,但您可能会拿着一把 Shiny 的大金锤进入臭代码领域。如果您只有几个方法,那么为每个操作创建事件处理程序应该不会看起来太乱。

关于c# - 如何使用最少的重复代码编写异步类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2039169/

相关文章:

c# - 预生成事件 : Copy Folder and it's SubFolders and files into Build Directory using XCopy

c# - 在 DataGridView 中搜索数据时出现 NullReferenceException

c# - 从 GitHub 部署到 Azure 错误

asp.net-mvc - 重定向(url)不起作用

c# - 如何检测我的程序是否在 Windows 中运行?

c# - 如何从动态 C# 代码编译中获取错误信息

javascript - 将 string[] 传递给 JavaScript

c# - 使用 SQL 2000 和 ASP.NET C# 创建搜索引擎

asp.net - 将 MVC 2 项目升级到 MVC 5

asp.net-mvc - 发送电子邮件到哪里去?服务层还是 Web 层?