我有2个BackgroundWorkers在我的code.each一个做一些工作,他们不能一起运行,这意味着第二个需要等待第一个完成。我也不想要应用程序崩溃时,我在工作中单击主窗口时,我可以做到吗?WFP BackgroundWorker等待其他BackgroundWorker完成
0
A
回答
2
首先是,也许你可以在1 BackgroundWorker
做所有的后台工作。
要回答您的问题,您可以在1st的RunWorkerCompleted事件处理程序中启动第2个BackgroundWorker
。
bw1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw1_RunWorkerCompleted);
private void bw1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//celebration!
//and then start the 2nd BackgroundWorker
BackgroundWorker bw2 = new BackgroundWorker();
bw2.DoWork += new DoWorkEventHandler(bw2_DoWork);
bw2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2_RunWorkerCompleted);
bw2.RunWorkerAsync();
}
+0
我会测试它......如果我将使用RunWorkerCompleted事件,它将在主线程中完成...... – user3719173 2014-11-24 12:07:00
+0
是的,'RunWorkerCompleted'运行在主线程上。这就是为什么'BackgroundWorker'被发明的原因,有些人没有意识到他们必须编组到主线程来更新UI。 – kennyzx 2014-11-24 12:07:55
相关问题
- 1. 等待BackgroundWorker RunWorker完成
- 2. 如何等待BackgroundWorker的完成?
- 3. 等待这些BackgroundWorker中的任一个完成
- 4. 等待BackgroundWorker完成后,在FormClosing时间运行
- 5. BackgroundWorker - 等待它完成或超时已过
- 6. WPF等待光标与BackgroundWorker线程
- 7. C# - backgroundworker等待文件被创建
- 8. 如何等待BackgroundWorker完成,然后退出控制台应用程序
- 9. 更改Backgroundworker从其他功能进展
- 10. 在另一个完成后运行BackgroundWorker
- 11. Backgroundworker ProgressChanged在工作完成后执行
- 12. 触发器Backgroundworker已完成的事件
- 13. BackGroundWorker无法识别DoWork的完成
- 14. BackGroundWorker
- 15. 等待其他处理器在MPI中完成其任务
- 16. 等待完成
- 17. 等待完成
- 18. C#在BackgroundWorker后执行一些操作RunWorker完成完成
- 19. BackgroundWorker或(Dispatcher)操作在完成ReportProgress时已经完成
- 20. SpeechRecognitionEngine BackgroundWorker
- 21. Powershell Backgroundworker
- 22. BackgroundWorker的
- 23. BackgroundWorker - C#
- 24. Backgroundworker abort
- 25. 在等待WMI通知事件时取消BackgroundWorker
- 26. 如何将此BackgroundWorker更新为异步/等待?
- 27. 等待$ .post完成
- 28. 等待NSURLSessionTask完成
- 29. jquery,等待完成
- 30. 等待webrequest完成
'我也不想当应用程序在工作期间点击主窗口时崩溃...唯一的方法是仔细测试和调试代码。 – kennyzx 2014-11-24 11:56:52
您基本上询问[synchronization](http://www.albahari.com/threading/part2.aspx),但如果*它们不能一起运行*,那么为什么您需要两个'BackgroundWorker'?有一个并为其提供参数以选择两个作业之一。 – Sinatr 2014-11-24 12:19:15
你为什么不使用*任务*?或者在C#5的情况下* async/await *?这两种方法都非常简单,并且可以为您的方案提供内置支持。 – galenus 2014-11-24 12:31:27