代码之家  ›  专栏  ›  技术社区  ›  TalkingCode

WinForms多线程方案问题

  •  2
  • TalkingCode  · 技术社区  · 15 年前

    今天早上我看到我的一个同事写了一些奇怪的代码。在一个WinForms应用程序中,整个主窗体被作为引用提供给一个线程。 他这样做是为了从表单中调用方法。不需要与UI交互,只需要简单的计算方法。 我已经确定这不是最佳实践,但我想知道一些事情。如果我从一个线程内部从主窗体调用方法,这些方法是否仍然作为多线程处理?还是在主窗体内运行? 当我从一个线程调用来自MainFrom的方法时,UI线程会受到影响吗?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Jon Norton    15 年前

    从不同线程调用的表单中的函数将在调用它们的线程上运行,并且对GUI线程没有影响。作为副作用,这意味着如果调用一个与GUI交互的函数,您将得到一个异常。

    如果您希望在GUI线程上调用它们,最简单的事情就是调用 Control.Invoke(...) 这会导致您传入的委托在GUI线程上执行,从而允许GUI交互。