等待嵌套的BackgroundWorkers完成

时间:2012-08-07 16:18:01

标签: c# .net wpf vb.net backgroundworker

我有一个产生BackgroundWorker的UI按钮。此BackgroundWorker生成几个执行某些操作的BackgroundWorkers。有没有办法等待所有内部BackgroundWorkers在主BackgroundWorker中完成?

2 个答案:

答案 0 :(得分:5)

您可以创建Semaphore,将其传递给衍生的后台工作人员,然后在后台工作人员代码调用Release方法的末尾。在主要工人呼叫WaitOne中,确切的次数等于产生的工人数量。确保将所有内容都包装在try ... finally中,以便在出现问题时应用程序不会挂起。

如果您使用的是.net 4,请考虑使用SemaphoreSlim,它是具有相同功能的轻量级版本。

答案 1 :(得分:0)

在您的主要工作人员代码中,您可以查看其他工作人员的IsBusy Property

“获取一个值,指示BackgroundWorker是否正在运行异步操作。”

Private Sub BackgroundWorkerMaster_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerMaster.DoWork
    Do While bgwChild1.IsBusy AndAlso bgwChild2.IsBusy
        System.Threading.Thread.Sleep(1) 'wait for a small amount of time
    Loop
End Sub