我可以在完成后访问BackgroundWorker启动的Argument吗?

时间:2012-02-14 15:07:15

标签: .net backgroundworker

当我开始BackgroundWorker时,我可以传递任意参数

backgroundWorker1.RunWorkerAsync(someStuff);

预期用途是将此任意参数提供给DoWork方法:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   Object someStuff = e.Argument;
   ...
}

现在我想在完成回调期间回复相同的论点:

private void backgroundWorker1_RunWorkerCompleted(object sender, 
                       RunWorkerCompletedEventArgs e)
{
    Object myStuff = e.Argument;
    ...
}

不是 e.Argument

UserState

private void backgroundWorker1_RunWorkerCompleted(object sender, 
                        RunWorkerCompletedEventArgs e)
{
    Object myStuff = e.UserState;
    ...
}

但这是一个已知的错误,UserState永远不会被设置或设置为任何东西。

那么什么是好的解决方法?

奖金阅读

1 个答案:

答案 0 :(得分:2)

将对象数组中的参数与实际结果一起返回。来自doWork处理程序。

        BackgroundWorker bgw = null;

    void main()
    {
        bgw = new BackgroundWorker();
        bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
        bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
    }

    void bgw_DoWork(object sender, DoWorkEventArgs e)
    {
        string otherResult = "Some Work Done";
        e.Result = new Object[2] {e.Argument, otherResult};
    }

    void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        //writes the argument;
        Console.WriteLine(((object[])e.Result)[0]);
    }
相关问题