【问题标题】:BackgroundWorker having everything passed as delegateBackgroundWorker 将所有内容都作为委托传递
【发布时间】:2014-04-05 15:21:22
【问题描述】:

我想将整个代码传递给 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。

【问题讨论】:

  • 你打电话给Invoke - 为什么?这就是把它放回主线程的原因......
  • 问题是如何不让这种情况发生,我不知道 BackgroundWorker 执行委托中的操作的语法是什么。

标签: c# winforms backgroundworker


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 2011-05-29
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多