我想将整个代码传递给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。
答案 0 :(得分:1)
问题是您从Invoke
方法调用call_DoWork
- 而Control.Invoke
在UI线程上调用委托。您只想在当前线程上调用委托:
var work = (MethodInvoker) e.Argument;
work();
(假设你的代表当然总是MethodInvoker
。)