从C#中的其他线程调用函数

Ank*_*ata 4 c#

我有一个主GUI线程与函数XYZ()来做一些关于GUI的事情.在其他线程中,如果我从主GUI的句柄调用XYZ(),则显示错误"跨线程操作无效:控制'Button00'从其创建的线程以外的线程访问."

我该怎么解决这个问题?我想我需要向GUI线程发送消息来做XYZ功能.请帮我.

谢谢.

Ankata

Dar*_*rov 7

您收到此错误消息的原因是您尝试从不同于主要的线程更新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)