c# - 完成后合并两个后台worker的结果

标签 c# .net multithreading asynchronous

我有两个后台线程

Worker = new BackgroundWorker();
Worker.DoWork += new DoWorkEventHandler(GetQuery);
Worker.RunWorkerCompleted += GetQuery_RunWorkerCompleted;
Worker.RunWorkerAsync();

Worker2012 = new BackgroundWorker();
Worker2012.DoWork += new DoWorkEventHandler(GetQuery2012);
Worker2012.RunWorkerCompleted += GetQuery2012_RunWorkerCompleted;
Worker2012.RunWorkerAsync();

工作线程中的两个方法都返回数据表

现在我的任务是我需要将这两个数据表合并为一个

出于这个原因,我在第一个任务的 RunCompletion 中执行此操作

void GetQuerys_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
   do{} while(Worker2012.IsBusy);
   //Merge Datatables
}

但出于某种原因,do while 循环似乎处于无限循环中。线程没有结束。有人可以告诉我我做错了什么吗?或者有没有更好的方法来等待第二个工作线程完成,以便我可以合并数据。任何帮助将不胜感激

最佳答案

既然 .NET 4.5 出来了,我建议大家使用 Task.Run 而不是 BackgroundWorker,例如:

var task1 = Task.Run(() => GetQuery());
var task2 = Task.Run(() => GetQuery2012());
var dataTables = await Task.WhenAll(task1, task2);
// Merge databases

Task.Run 在各个方面都优于 BackgroundWorker,这在做任何复杂的事情(即协调两个后台操作)时尤其明显。

关于c# - 完成后合并两个后台worker的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659124/

相关文章:

c# - 重构 LINQ 查询

c# - ASP.Net "Access to the path ' ' 被拒绝。“文件上传控件在 Web 服务器 (IIS7) 中不起作用

c# - 使用 WebBrowser 类 C# 获取/设置 cookie

c# - C# 开发者的编程问题书 - 算法

c# - ClickOnce部署网站修改

c# - 从 .Net Winform 应用程序访问 GPS 数据

asp.net - 从线程内更新网页

c++ - 带定时器和信号的多线程程序

java - 在 Java 中的多个线程之间共享一个 int 或一个整数对象

c# - 从父类参数获取子类类型