C# winform跨线程操作控件的实现
前提:当我们使用Winform开发的时候,经常会遇到:System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxxx”的线程访问它。”
原因:发生次异常的原因是因为winform在渲染UI界面和操作界面数据的时候使用的是同一个线程。当我们创建另外一个线程,去操作此线程的UI控件,会导致线程不安全。winform为了防止线程不安全,因此杜绝了这个跨线程操作,并且抛出异常。
异常举例:创建两个控件,一个是按钮控件,一个是lable控件
private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(()=> { if (this.InvokeRequired) { this.Invoke(new Action(() => { lable1.Text = "Hello Thread!"; })); } } ); thread.IsBackground = true; thread.Start(); }
当执行此按钮的时候,会导致跨线程操作异常。
解决方案:
使用InvokeRequired属性,判断是否是线程安全。
if (this.InvokeRequired) { this.Invoke(new Action(() => { lable1.Text = "Hello World!"; })); } else { lable1.Text = "Hello World!"; }
到此这篇关于C# winform跨线程操作控件的实现的文章就介绍到这了,更多相关C# winform跨线程操作控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#实现将32位MD5摘要串转换为128位二进制字符串的方法
这篇文章主要介绍了C#实现将32位MD5摘要串转换为128位二进制字符串的方法,涉及C#字符串遍历、加密与转换相关操作技巧,需要的朋友可以参考下2017-04-04
最新评论