多线程访问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
{
//访问控件的代码
}
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
{
//访问控件的代码
}
相关文章推荐
- C程序访问hadoop出现的各种编译错误和运行时各种类DefFound异常的解决方法
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- C程序访问hadoop出现的各种编译错误和运行时各种类DefFound异常的解决方法(makefile的书写和环境变量的配置)
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- Android Studio编辑器输入出现字体异常、英文格式不对的解决方法
- 访问chm文件出现 已取消到该网页的导航的解决方法
- 关于对话框创建过程出现异常的解决方法
- getOutputStream() has already been called for this response异常出现的原因和解决方法
- VS调试项目出现"访问IIS元数据库失败"的267904错误解决方法
- 还原数据库时出现“无法获得对数据库的独占访问权”问题的解决方法
- ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法
- 异常详细信息: System.Web.Hosting.HostingEnvironmentException: 访问 IIS 元数据库失败 解决方法
- ajax自定义header跨域访问webapi 405异常的解决方法
- linux系统访问win2003 FTP连接时出现“227 Entering Passive Mode” 的解决方法
- “Internet连接共享访问被启用时,出现了一个错误” 解决方法 .
- Win7开机出现group policy client拒绝访问的解决方法
- VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
- 在java中常出现的异常和解决方法
- IIS下调用证书出现异常的解决方法 (C#)