跨线程访问窗体控件

网友投稿 624 2022-09-28

跨线程访问窗体控件

跨线程访问窗体控件

跨线程访问窗体控件

左直拳

我写了一个函数,里面访问到了窗体上的控件。

看起来没有什么问题。

然后开启了一个线程,让它执行此函数。结果运行时报错:跨线程访问窗体控件,在非创建该控件的线程上试图访问该控件。

后来查了帮助,才知道怎么一回事。帮助说:

访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。

怎样才算安全?

在给控件赋值或设置前,先看看方法调用时是否必须调用 Invoke 方法。

Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。

if (objCtrl.InvokeRequired) { SetTextCallback d = new SetTextCallback(_SetText); this.Invoke(d, new object[] { objCtrl, text }); } else { objCtrl.Text = text; } } //调用 publicint{ setTextBox>(this.txt_Total, value.ToString()); } }

有关具体内容,请查阅帮助如何:对 Windows 窗体控件进行线程安全调用

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Swagger注解
下一篇:实验一 远程过程调用中间件及数据访问中间件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~