我有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