您的位置:首页 > 其它

多线程访问winform控件出现异常的解决方法

2013-12-06 15:28 155 查看
一. 多线程访问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
{
//访问控件的代码
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐