sis*_*dog 13 c# backgroundworker
大家好.我有一组运行Worker类实例的BackgroundWorker对象.当我调用Worker类时,对象实例会执行它,然后用尽代码(循环结束).我能够收听RunWorkerCompleted()事件,但是当它调用我设置的委托时,我需要知道我的哪些Worker对象刚刚完成.
我在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." });
}
Run Code Online (Sandbox Code Playgroud)
因此,当我的Worker对象在其Start()方法中完成循环时,我该怎么做才能填充传递给我的WorkerFinished方法()的RunWorkerCompleteEventArgs对象"e"的userState属性?
谢谢
Phi*_*eck 13
您Start在Worker类上的方法可以设置参数的Result属性DoWorkEventArgs.这是一个例子:
void Start(object sender, DoWorkEventArgs e)
{
//Do your loop and other work.
e.Result = this;
}
Run Code Online (Sandbox Code Playgroud)
然后在完成事件处理程序中,您可以检索e.Result:
public void WorkerFinished(object sender, RunWorkerCompletedEventArgs e)
{
//You should always check e.Cancelled and e.Error before checking e.Result!
// ... even though I'm skipping that here
Worker w = e.Result as Worker;
if( w != null)
{
if (_onManagerEvent != null)
_onManagerEvent(new ManagerEvent
{
EventDate = DateTime.Now,
Message = String.Format("Worker {0} successfully ended."
, w.ToString())
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11564 次 |
| 最近记录: |