我有一个产生BackgroundWorker的UI按钮。此BackgroundWorker生成几个执行某些操作的BackgroundWorkers。有没有办法等待所有内部BackgroundWorkers在主BackgroundWorker中完成?
答案 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