本文主要介绍了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# winform跨线程操作控件的实现


基础教程推荐
猜你喜欢
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#中的Linq to JSON操作详解 2023-06-08
- Unity shader实现高斯模糊效果 2023-01-16
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C# 解析XML和反序列化的示例 2023-04-14
- 实例详解C#实现http不同方法的请求 2022-12-26