一. 多线程访问winform控件出现异常的解决方法
1. 问题描述
<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationException异常。
(1) 并提示消息:“从不是创建控件 control name 的线程访问它。”
<2> 默认情况下,winform控件只能由创建该控件的线程调用 。
(1) 如果要在新的线程中调用该控件,则需要使用控件的invoke方法来进行。
************************************************************************************************
2. 解决方法1:
<1> 说明:非线程安全方式。
(1) 代码放在构造函数中。
<2> 设置Control类的静态属性CheckForIllegalCrossThreadCalls为false。
(1) 形式:Control.CheckForIllegalCrossThreadCalls = false;
************************************************************************************************
3. 解决方法2:
<1> 说明:线程安全方式。
<2> 定义委托:delegate void CrossThreadCallHandler( object[] datas );
<3> 定义访问winform控件的方法:
void SetControlValue( object[] datas )
{
//访问控件的代码
}
<4> 在新线程中调用winform控件
if ( 控件ID.InvokeRequired )
{
控件ID.Invoke( new CrossThreadCallHandler( SetControlValue ) , new object[] { 值1,值2 } );
}
else
{
//访问控件的代码
}
转载于:https://www.cnblogs.com/zzh1236/p/3461491.html