您可以创建一个包含它们的数组。为每个你添加一个处理程序。完成后,通过数组来处置它们。例如(抱歉,这是从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
)。
无论如何,您还需要处理尚未完成的工作。
来源
2012-10-24 16:33:30
K3N
您是否也考虑过任务(.NET 4)? –
@Mudu没有任何优于BackgroundWorkers的优势? – ateiob
这将有助于了解工人会做什么。 –