使用BackgroundWorker处理程序中的参数

时间:2011-06-16 06:32:34

标签: c# multithreading parameters backgroundworker

要将数据传递给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

1 个答案:

答案 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

中传递结果