HI all。 我有一個運行Worker類實例的BackgroundWorker對象數組。當我調用Worker類時,對象實例就是這樣,然後用完代碼(循環結束)。我能聽RunWorkerCompleted()事件,但是當它調用,我已經建立了委託我需要知道哪些我工人的對象剛剛完成。如何設置在RunWorkerCompletedEventArgs對象UserState?
我看到這使我委託RunWorkerCompletedEventArgs一個UserState屬性,但我不知道如何,因爲它是在完成設置這在我的Worker對象。
任何想法?從我WorkManager.cs類
片段
public Worker AddWorker()
{
Worker w = new Worker();
_workers.Add(w.WorkerID,w);
BackgroundWorker bg = new BackgroundWorker();
_bgworkers.Add(bg);
bg.DoWork += w.Start;
bg.WorkerReportsProgress = true;
bg.WorkerSupportsCancellation = true;
bg.ProgressChanged += ProcessWorkerMessage;
bg.RunWorkerCompleted += WorkerFinished;
w.WorkManager = this;
w.BackgroundWorker = bg;
bg.RunWorkerAsync(w);
return w;
}
public void WorkerFinished(object sender, RunWorkerCompletedEventArgs e)
{
if (_onManagerEvent != null)
_onManagerEvent(new ManagerEvent { EventDate = DateTime.Now, Message = "Worker ??? successfully ended." });
}
所以,當我的Worker對象完成了循環在其開始()方法,我該怎麼辦,以填補RunWorkerCompleteEventArgs對象「E」的userState屬性,傳遞給我的WorkerFinished方法()?
感謝
感謝菲利普,該訣竅。關於總是檢查e.Cancelled的評論是關鍵。我實際上是通過調用BackgroundWorker對象的CancelAsync()方法來停止我的工作線程。這導致RunWorkercompletedEventArgs Result屬性沒有我的原始對象。我重構了通過在工作對象上設置一個屬性來停止工作(以線程安全的方式!),並在工人的代碼循環中檢查它。如果我看到它的信號,我只是退出循環,瞧,RunWorkercompletedEventArgs參數在e.Result中有我的對象。 – sisdog 2010-11-30 08:57:44