我有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完成?
- 2. 如何等待BackgroundWorker完成?
- 3. 等待BackgroundWorker RunWorker完成
- 4. 如何等待BackgroundWorker的完成?
- 5. 等待所有排队的BackgroundWorker完成?
- 6. 如何等待BackgroundWorker完成运行另一个BackgroundWorker(C#)?
- 7. 在Dispose中等待Backgroundworker()
- 8. 等到我的BackgroundWorker完成后才能打开新的BackgroundWorker
- 9. 从BackgroundWorker DoWork传递值到BackgroundWorker完成
- 10. 主线程等待多个backgroundworker线程来完成
- 11. BackgroundWorker - 等待它完成或超时已过
- 12. 等待这些BackgroundWorker中的任一个完成
- 13. 等待BackgroundWorker完成后,在FormClosing时间运行
- 14. BackgroundWorker在DoWork之前完成
- 15. RunWorkerAsync关闭完成的BackgroundWorker
- 16. 重构BackgroundWorker的非同步的/等待
- 17. C# - backgroundworker等待文件被创建
- 18. WPF等待光标与BackgroundWorker线程
- 19. C#BackgroundWorker等待直到尽头
- 20. 如何等待BackgroundWorker完成,然后退出控制台应用程序
- 21. 更改Backgroundworker从其他功能进展
- 22. Backgroundworker ProgressChanged在工作完成后执行
- 23. 在另一个完成后运行BackgroundWorker
- 24. BackGroundWorker无法识别DoWork的完成
- 25. 触发器Backgroundworker已完成的事件
- 26. 暂停新的BackGroundWorker,直到完成前
- 27. 当BackgroundWorker完成时停止故事板
- 28. 未能在完成Backgroundworker后更新UI
- 29. BackGroundWorker
- 30. 等待其他处理器在MPI中完成其任务
'我也不想当应用程序在工作期间点击主窗口时崩溃...唯一的方法是仔细测试和调试代码。 – 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