我有一个主GUI线程与函数XYZ()来做一些关于GUI的事情.在其他线程中,如果我从主GUI的句柄调用XYZ(),则显示错误"跨线程操作无效:控制'Button00'从其创建的线程以外的线程访问."
我该怎么解决这个问题?我想我需要向GUI线程发送消息来做XYZ功能.请帮我.
谢谢.
Ankata
您收到此错误消息的原因是您尝试从不同于主要的线程更新GUI控件,这是不可能的.应始终在用于创建GUI控件的同一线程上修改GUI控件.
如果InvokeRequired将调用主线程的调用,则可以使用Invoke.这是一篇很好的文章.
但最简单的解决方案可能就是简单地使用BackgroundWorker,因为这样您就不再需要手动编组对GUI线程的调用.这是自动完成的:
var worker = new BackgroundWorker();
worker.DoWork += (sender, e) =>
{
// call the XYZ function
e.Result = XYZ();
};
worker.RunWorkerCompleted += (sender, e) =>
{
// use the result of the XYZ function:
var result = e.Result;
// Here you can safely manipulate the GUI controls
};
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)