0

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

4

2 回答 2

5

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

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

于 2012-08-07T16:21:56.247 回答
0

在您的主要工作人员代码中,您可以检查其他工作人员的IsBusy 属性

“获取一个值,该值指示 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
于 2012-08-07T16:20:44.920 回答