要将数据传递给BackgroundWorker
的{{1}}我使用单独的包装类'实例:
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);
中使用mpar
实例的参数,在另一个线程中运行。
worker1_DoWork
在void worker1_DoWork(object sender, DoWorkEventArgs e)
{
//here we use mpar.Par1, mpar.Par2 and so on
}
我们在UI线程中做了一些postactions。
我的问题是:我们可以在RunWorkerCompletedEventHandler
处理程序中使用RunWorkerCompleted
实例,它刚好在mpar
处理程序中运行,我们可以确定它的值和DoWork
中的一样吗?如果不是,那么为DoWork
操作的各个阶段共享参数的正确方法是什么?
BackgroundWorker
答案 0 :(得分:19)
您可以在e.Result
worker1_DoWork
的值
static void worker1_DoWork(object sender, DoWorkEventArgs e)
{
//Do the work
//...
e.Result = new MyParams();
}
然后,您可以在worker1_RunWorkerCompleted
中的e.Result
中获取它。
如果您需要传递额外的结果值并且不想将MyParams对象放在worker1_DoWork: e.Result
中 - 那么您可以使用ResultHolder
和{{创建一个小类MyParams
1}}作为属性并使用该类在MyResult