我们有一个非常适合多个BackgroundWorkers的业务案例。
例如,我们有一个带有“保存”按钮的表单。通常,我们将同步运行所有保存命令(以保存为例),然后关闭表单。我们现在想使用backgroundworker将工作拆分为单独的线程。
我们将遍历每个所需的“保存”(可能需要执行许多和/或不同数量的命令),为每个所需的命令创建一个BackgroundWorker。
问题是……在关闭表单之前,我们如何等待所有BackgroundWorkers完成。我们知道如何等待单个BackgroundWorker完成,但是当我们要操作X个BackgroundWorkers时,如何在关闭UI表单之前等待所有工作完成,直到完成?
最佳答案
跟踪您启动的BackgroundWorkers的数量,减少Completed
事件中的数量,并在表单达到0时关闭它。
由于Completed
事件在UI线程上引发,因此您不必担心线程安全。