如何从C#中的工作线程发布UI消息

我正在用C#编写一个简单的Winforms应用程序。 我创build了一个工作线程,我希望主窗口响应完成工作的步骤 – 只需更改文本字段testField.Text =“就绪”中的某些文本即可。 我尝试了事件和callback,但是它们都是在调用线程的上下文中执行的,并且不能从工作线程执行UI。

我知道如何在C / C ++中做到这一点:从工作线程调用PostMessage。 我假设我可以从C#调用Windows API,但没有更多的.NET特定的解决scheme?

Solutions Collecting From Web of "如何从C#中的工作线程发布UI消息"

在从已完成的线程回调的事件中,使用InvokeRequired模式,正如本SO帖子演示的各种答案所示。

C#:自动化InvokeRequired代码模式

另一个选择是使用BackgroundWorker组件来运行你的线程。 RunWorkerCompleted事件处理程序在启动worker的线程上下文中执行。

我通常做这样的事情

 void eh(Object sender, EventArgs e) { if (this.InvokeRequired) { this.Invoke(new EventHandler(this.eh, new object[] { sender,e }); return; } //do normal updates } 

Control.Invoke()或Form.Invoke()方法执行您在UI线程上提供的委托。

您可以使用窗体的调用函数。 该函数将在UI线程上运行。

EX:

 ... MethodInvoker meth = new MethodInvoker(FunctionA); form.Invoke(meth); .... void FunctionA() { testField.Text = "Ready". } 

使用C#MethodInvoker.Invoke()的GUI应用程序…这是好的吗?