WinForm(C#)中跨线程访问控件的解决方法
来源:互联网 发布:vim python插件 编辑:程序博客网 时间:2024/06/07 20:43
由于多线程可能导致对控件访问的不一致,导致出现问题。C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出异常。
解决办法有两个:
1、不进行线程安全的检查
2、通过委托的方式,在控件的线程上执行
publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
//方法一:不进行跨线程安全检查
//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
Threadth1=newThread(newThreadStart(CalNum));
th1.Start();
}
privatevoidCalNum()
{
//button1.Enabled = false;
intresult=0;
for(inti=1;i<100000000;i++)
{
result+=i;
}
SetCalResult(result);
//button1.Enabled = true;
}
//方法二:检查是否跨线程,然后将方法加入委托,调用委托
publicdelegatevoidSetTextHandler(intresult);
privatevoidSetCalResult(intresult)
{
if(label2.InvokeRequired==true)
{
SetTextHandlerset=newSetTextHandler(SetCalResult);//委托的方法参数应和SetCalResult一致
label2.Invoke(set,newobject[]{result});//此方法第二参数用于传入方法,代替形参result
}
else
{
label2.Text=result.ToString();
}
}
}
转载地址:http://blog.bossma.cn/winform/winform_csharp_cross_thread_control_invoke/ 0 0
- WinForm(C#)中跨线程访问控件的解决方法
- WinForm(C#)中跨线程访问控件的解决方法
- WinForm(C#)中跨线程访问控件的解决方法
- c#中线程访问winform控件的若干问题
- 转:c#中线程访问winform控件的若干问题
- c#中线程访问winform控件的若干问题
- C#Winform中多线程访问控件问题,可帮助解决“线程间操作无效: 从不是创建控件“FrmUpdate”的线程访问它。”异常
- .NET WinForm中 一个 跨线程访问控件的示例(网络)
- Winform 跨线程访问控件的两个方法总结
- WinForm中线程问题:线程间操作无效: 从不是创建控件“...”的线程访问它
- WinForm中线程问题:线程间操作无效: 从不是创建控件“...”的线程访问它
- C#跨线程访问WinForm控件
- C# WinForm 跨线程访问控件
- Winform中多线程的控件访问引发的“线程间操作无效,从不是创建控件的线程访问它”
- 多线程中跨线程访问的解决方法
- Winform 线程间访问控件
- c# winform开发 从线程中访问控件
- winform程序中如何跨线程修改控件的值
- Java接口与多继承
- node 节点
- IOS应用沙盒机制与文件操作
- SQL Server 2008数据库重命名方法
- Hibernate get和load区别
- WinForm(C#)中跨线程访问控件的解决方法
- Video/Motion Segmentation Dataset and Benchmark
- JS处理JSON字符串
- UIScrollView加到导航控制器注意加一句话
- splinter安装
- 浏览器的内部对象
- 实例分析jdom和dom4j的使用和区别
- SQL Server 语句大全
- 第七周项目三 求三个数中的最大值