我使用一个单独的包装类实例将数据传递到BackgroundWorker
的DoWork
方法中:
MyParams mpar = new MyParams();
...
mpar.Par1 = par1val;
mpar.Par2 = par2val;
mpar.Par3 = par3val;
...
var worker1 = new System.ComponentModel.BackgroundWorker();
worker1.DoWork += new DoWorkEventHandler(worker1_DoWork);
worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_RunWorkerCompleted);
worker1.RunWorkerAsync(mpar);
然后我可以在另一个线程中使用worker1_DoWork
中的 mpar
实例参数。
void worker1_DoWork(object sender, DoWorkEventArgs e)
{
//here we use mpar.Par1, mpar.Par2 and so on
}
在RunWorkerCompletedEventHandler
中,我们在UI线程中执行一些后续操作。
我的问题是:在RunWorkerCompleted
处理程序中,我们是否可以使用之前在DoWork
处理程序中工作的mpar
实例,并且我们可以确信其值与DoWork
时相同吗?如果不能,那么分享BackgroundWorker
操作的各个阶段的参数的正确方法是什么?
void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Dispatcher.BeginInvoke((Action)(() =>
{
//Can we use the mpar instance here?
}
));
}
worker1_DoWork
中,我是否应该明确地将mpar
写入e.Result
:e.Result = mpar;
? - rem