产卵背景工作者

时间:2010-04-19 00:28:20

标签: c# multithreading backgroundworker

我们有一个适合多个BackgroundWorkers的商业案例。

例如,我们有一个带有“保存”按钮的表单。通常我们会同步运行所有保存命令(保存是一个示例),然后关闭表单。我们现在想使用backgroundworker将工作分成不同的线程。

我们将循环遍历所需的每个“Save”(可能是需要执行的许多和/或不同数量的命令),为所需的每个命令创建BackgroundWorker。

问题是......在关闭表单之前,我们如何等待所有BackgroundWorkers完成。我们了解如何等待单个BackgroundWorker完成,但是当我们有X个BackgroundWorkers正在运行时,我们如何在关闭UI表单之前等待所有操作完成?

2 个答案:

答案 0 :(得分:2)

跟踪您已启动的BackgroundWorkers的数量,减少Completed事件中的数字,并在表单达到0时关闭该表单。

由于在UI线程上引发了Completed事件,因此您无需担心线程安全。

答案 1 :(得分:0)

我建议使用以下(非常优秀的)MSDN杂志文章中提供的CountdownLatch类:

9 Reusable Parallel Data Structures and Algorithms

请记住SLaks关于在UI线程上引发的BackgroundWorker Completed事件的注意事项,这可能有点过分。