我们有一个适合多个BackgroundWorkers的商业案例。
例如,我们有一个带有“保存”按钮的表单。通常我们会同步运行所有保存命令(保存是一个示例),然后关闭表单。我们现在想使用backgroundworker将工作分成不同的线程。
我们将循环遍历所需的每个“Save”(可能是需要执行的许多和/或不同数量的命令),为所需的每个命令创建BackgroundWorker。
问题是......在关闭表单之前,我们如何等待所有BackgroundWorkers完成。我们了解如何等待单个BackgroundWorker完成,但是当我们有X个BackgroundWorkers正在运行时,我们如何在关闭UI表单之前等待所有操作完成?
答案 0 :(得分:2)
跟踪您已启动的BackgroundWorkers的数量,减少Completed
事件中的数字,并在表单达到0时关闭该表单。
由于在UI线程上引发了Completed
事件,因此您无需担心线程安全。
答案 1 :(得分:0)
我建议使用以下(非常优秀的)MSDN杂志文章中提供的CountdownLatch类:
9 Reusable Parallel Data Structures and Algorithms
请记住SLaks关于在UI线程上引发的BackgroundWorker Completed
事件的注意事项,这可能有点过分。