WinForm中在非UI线程更改控件值的办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinForm中在非UI线程更改控件值的办法相关的知识,希望对你有一定的参考价值。

从非UI线程调用UI控件赋值、或进行其他更新UI的操作的话,会出现异常:

System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxx”的线程访问它。”

解决办法:

原来的

xxx.Text="Test";

换成

xxx.BeginInvoke(new Action(()=>{xxx.Text="Test"}));

使用BeginInvoke解决。

参考:Control的Invoke和BeginInvoke 是相对于支线线程(因为一般在支线线程中调用,用来更新主线程ui)Invoke立即插入主线程中执行,而BeginInvoke 要等主线程结束才执行

c# Invoke和BeginInvoke 区别

 

以上是关于WinForm中在非UI线程更改控件值的办法的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform 跨线程更新UI控件常用方法汇总

Winform 跨线程更新UI控件常用方法汇总

实现Winform 跨线程安全访问UI控件

C# Winform 跨线程更新UI控件常用方法总结(转)

富客户端 wpf, Winform 多线程更新UI控件

winform中如何在多线程中更新UI控件--ListView实时显示执行信息