gpt4 book ai didi

c# - C#调用其他线程的函数

转载 作者:太空狗 更新时间:2023-10-30 00:21:43 24 4
gpt4 key购买 nike

我有一个带有函数 XYZ() 的主 GUI 线程来做一些关于 GUI 的事情。在其他线程中,如果我从主 GUI 的句柄调用 XYZ(),它会显示错误 “跨线程操作无效:从创建它的线程以外的线程访问控件‘Button00’。”

我该如何解决?我想我需要向 GUI 线程发送一条消息来执行 XYZ 功能。请帮助我。

谢谢。

安卡塔

最佳答案

您收到此错误消息的原因是因为您试图从与主线程不同的线程更新 GUI 控件,这是不可能的。应始终在用于创建它们的同一线程上修改 GUI 控件。

你可以使用 Invoke如果InvokeRequired这将编码对主线程的调用。这是一个 nice article .

但可能最简单的解决方案是简单地使用 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();

关于c# - C#调用其他线程的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com