2014-11-24 114 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

相关问题