是否有Form.Invoke()方法?

时间:2010-05-07 11:41:55

标签: c# winforms multithreading

我是多线程(也是C#)的新手,所以我希望这不是很明显:

在我的表单(WinForms应用程序,.NET 2.0)中,我订阅了由另一个对象引发的事件,并且在处理此事件时,我希望在我的表单上更改几个控件。由于此事件是在另一个线程中引发的,而不是主(UI)线程,我想封送对Form的线程的调用。

我知道我可以在我想要更改的任何Control上使用Control.Invoke()方法,但由于其中有几个我不希望这样做。

在搜索互联网时,我发现提示Form类本身提供了一个Invoke()方法。参见例如: http://marioschneider.blogspot.com/2008/04/invoke-methode-fr-multithread.html (对不起,因为我是新用户,我似乎无法发布多个链接。如果可能,我会添加更多链接作为评论。)

有了这个,我可以包装我的事件处理程序,然后就像在UI线程上调用它一样使用它。但是,这似乎并没有在我的环境中定义,并且在MSDN的System.Windows.Forms.Form文档中也没有任何迹象。

这种方法是否存在于.NET-Framework中?我发现很难相信Form不会提供这样的方法,因为它使用了与它相同的消息队列。 (或者我在这里遗漏了什么?)

1 个答案:

答案 0 :(得分:5)

Form上的{p> There's the Invoke method,因为它来自Control