Winforms多线程场景问题

时间:2009-03-25 11:00:46

标签: winforms multithreading

今天早上我看到了我的一位同事的一些奇怪的代码。在winforms应用程序中,整个Mainform被赋予一个线程作为参考。 他这样做是为了从Form中调用方法。没有什么可以与UI交互,只是简单的计算方法。 我已经确定这不是最好的做法,但我想知道一些事情。如果我从一个线程内部调用Mainform中的方法,这些方法仍然作为多线程处理?或者它们是在Mainform中运行的? 当我从一个线程调用Mainfrom中的方法时,UI线程会受到影响吗?

1 个答案:

答案 0 :(得分:5)

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

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