2014-11-24 154 views
0

我有2個BackgroundWorkers在我的code.each一個做一些工作,他們不能一起運行,這意味着第二個需要等待第一個完成。我也不想要應用程序崩潰時,我在工作中單擊主窗口時,我可以做到嗎?WFP BackgroundWorker等待其他BackgroundWorker完成

+0

'我也不想當應用程序在工作期間點擊主窗口時崩潰...唯一的方法是仔細測試和調試代碼。 – kennyzx 2014-11-24 11:56:52

+0

您基本上詢問[synchronization](http://www.albahari.com/threading/part2.aspx),但如果*它們不能一起運行*,那麼爲什麼您需要兩個'BackgroundWorker'?有一個併爲其提供參數以選擇兩個作業之一。 – Sinatr 2014-11-24 12:19:15

+0

你爲什麼不使用*任務*?或者在C#5的情況下* async/await *?這兩種方法都非常簡單,並且可以爲您的方案提供內置支持。 – galenus 2014-11-24 12:31:27

回答

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

相關問題