c# – 完成后合并两个后台工作人员的结果
发布时间:2020-12-16 01:57:09 所属栏目:百科 来源:网络整理
导读:我有两个背景线程 Worker = new BackgroundWorker();Worker.DoWork += new DoWorkEventHandler(GetQuery);Worker.RunWorkerCompleted += GetQuery_RunWorkerCompleted;Worker.RunWorkerAsync();Worker2012 = new BackgroundWorker();Worker2012.DoWork += ne
我有两个背景线程
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,当做任何复杂的事情(即协调两个后台操作)时,这一点尤为明显. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |