您可以創建一個包含它們的數組。爲每個你添加一個處理程序。完成後,通過數組來處置它們。例如(抱歉,這是從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
這將有助於瞭解工人會做什麼。 –