【问题标题】:Winforms - Invoking a method in another threadWinforms - 在另一个线程中调用方法
【发布时间】:2013-01-15 13:10:37
【问题描述】:

在与 winform 按钮不同的线程中调用方法以使 ui 不会冻结或造成延迟的最佳做法是什么?

【问题讨论】:

  • 看看BackgroundWorker,它是专门为此目的而创建的......
  • @Soner:谢谢,但我不同意。有专门针对 WinForms ui 控件的线程解决方案。我认为你的标题太笼统了。 (例如 BeginInvoke)。重新编辑。

标签: c# winforms c#-4.0


【解决方案1】:

第一步开始

如果这不符合您的要求,或者您需要更高级的东西,您应该看看其中之一:

【讨论】:

    【解决方案2】:
    Invoke((MethodInvoker) delegate {
        DoSomething();
    });
    

    【讨论】:

    • 这听起来像是从后台线程到 UI 线程的相反方式。
    • @UweKeim:不确定你的意思。此代码可用于从不是 UI 线程的线程调用方法。在我看来,这是 OP 要求的。
    • 我很确定他的意思与你的意思相反:-)
    【解决方案3】:

    您应该致电Control.InvokeBeginInvoke,请参阅深入参考here

    【讨论】:

    • 你所描述的恰恰相反。
    【解决方案4】:

    你可以这样做

     Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
     {         
          //DO SOMETHING         
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多