BackgroundWorker将所有内容作为委托传递

时间:2014-04-05 15:21:22

标签: c# winforms backgroundworker

我想将整个代码传递给BackgroundWorker DoWork事件。我认为就是那样

     var c = (MethodInvoker)delegate
     {
           object all = z.bg_getAllPlugins("size=10");
           propertyGrid1.Invoke((MethodInvoker)delegate
           {
                propertyGrid1.SelectedObject = all;
           });
     };
     call.RunWorkerAsync(c);

但是当我尝试调用它时

    private void call_DoWork(object sender, DoWorkEventArgs e)
    {
        Invoke(e.Argument);
    }

,它在主线程上调用它,从而使BackgroundWorker无法完成它的工作。 BackgroundWorker是否可以在DoWork线程中调用Delegate?

现在只是传递参数,成为一个委托MethodInvoker。

1 个答案:

答案 0 :(得分:1)

问题是您从Invoke方法调用call_DoWork - 而Control.Invoke 在UI线程上调用委托。您只想在当前线程上调用委托:

var work = (MethodInvoker) e.Argument;
work();

(假设你的代表当然总是MethodInvoker。)