我正在用C#编写一个简单的winforms应用程序。我创建了一个工作线程,我希望主窗口响应完成其工作的步骤 - 只需更改文本字段中的一些文本,testField.Text =“Ready”。我尝试了事件和回调,但它们都在调用线程的上下文中执行,你不能从工作线程做UI。
我知道如何在C / C ++中完成它:从工作线程调用PostMessage。我假设我可以从C#调用Windows API,但是不存在更具特定于.NET的解决方案吗?
答案 0 :(得分:2)
在完成的线程回调事件中,使用InvokeRequired
模式,如此SO帖子的各种答案所示。
C#: Automating the InvokeRequired code pattern
另一种选择是使用BackgroundWorker
组件来运行你的线程。 RunWorkerCompleted
事件处理程序在启动worker的线程的上下文中执行。
答案 1 :(得分:1)
我通常做这样的事情
void eh(Object sender,
EventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new EventHandler(this.eh, new object[] { sender,e });
return;
}
//do normal updates
}
答案 2 :(得分:0)
Control.Invoke()或Form.Invoke()方法执行您在UI线程上提供的委托。
答案 3 :(得分:0)
您可以使用表单的Invoke功能。该函数将在UI线程上运行。
EX:
...
MethodInvoker meth = new MethodInvoker(FunctionA);
form.Invoke(meth);
....
void FunctionA()
{
testField.Text = "Ready".
}
答案 4 :(得分:0)