您可以创建一个包含它们的数组。为每个您添加一个处理程序。完成后,通过数组来处理它们。例如(对不起,这是从 VB 代码翻译过来的,我不是 C# 专家,所以最坏的情况请视为伪代码):
//globally
List<BackgroundWorker> workers = new List<BackgroundWorker>();
//within a sub/function
int numberOfWorkersNeeded = 10;
for (i = 0; i < numberOfWorkersNeeded; i++) {
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(MyWorkHandler);
bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(MyWorkFinishedHandler);
workers.Add(bg);
}
要删除(它们是可重复使用的,所以这是用于退出或不再需要工人时):
for (i = 0; i < workers.Count; i++) {
if (!bg.IsBusy) {
//remove handlers
workers(i).Dispose();
}
}
正如@ateiop 所说,权衡取舍,您需要手动创建(和删除)事件处理程序。
因为BackgroundWorker
你有两个主要事件,DoWork
和RunWorkerCompleted
。此外,如果您想报告进度,您需要启用报告 ( bg.WorkerReportsProgress = true;
) 并为此添加处理程序 ( ProgressChanged
)。
In any case, you also need to handle workers that hasn't finished.