线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析...
最近,在做一个使用线程控制下载文件的小程序(使用进度条控件显示下载进度)时,遇到这样的问题,
错误显示:
未处理的“System.InvalidOperationException”类型的异常出现在 System.Windows.Forms.dll 中。
其他信息: 线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
以前很少做关于线程的程序,而且对于线程的理解也不是很深,无奈只好百度之。很快从网上找到了解决方案:
方法1、在Form Load事件中加入
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
这是是最简单的方式!
方法二、使用Invoke调用委托
参考示例代码:
1.定义 委托
delegate void myDelegate(int i);
myDelegate mydelegate = null;
2.定义方法,显示消息
public void ShowMessage(int i)
{
this.textBox1.Text = i.ToString();
this.progressBar1.Value = i;
}
3.定义方法,驱动消息
public void MyEvent()
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(100);
this.BeginInvoke(mydelegate, new object[] {i});
}
}
4: 运行
private void button1_Click(object sender, EventArgs e)
{
mydelegate = new myDelegate(ShowMessage);
Thread myThread = new Thread(MyEvent);
//IsBackground 是否后台
//这个属性很重要 .如果 Thread IsBackground 等于false
// 当线程还没有结束时,你点了关闭按钮
// 将抛出An unhandled exception
//of type 'System.InvalidOperationException'
//occurred in System.Windows.Forms.dll 异常
myThread.IsBackground = true;
myThread.Start();
}
问题分析:
根据错误提示,可知在调试器中运行应用程序时,如果不是控件的创建者线程试图调用该控件时,则调试器会引发 InvalidOperationException,并提示消息:“从不是创建控件 Control Name 的线程访问它。” 说白了,就是资源访问的不一致性,控件的调用者线程不是控件的创建者线程,这是.net实现资源安全访问机制的必然结果。访问 Windows 窗体控件本质上不是线程安全的。如果多个线程同时操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。
转载于:https://blog.51cto.com/5902977/1055986
线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析...相关推荐
- C# WinForm 线程间操作无效: 从不是创建控件的线程访问它的解决办法
.net2后是不能跨线程访问控件的.,窗体上的控件是当前线程创建的,当用户异步执行一个方法:在该方法中给窗体上的控件赋值,记住:当执行一个异步委托的时候,其实 就是开了一个线程去执行那个方法,这样就会 ...
- C#线程间操作无效: 从不是创建控件 XX 的线程访问它
转自:http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列 ...
- 黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...
在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个时候程序会卡,当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作 ...
- 线程间操作无效: 从不是创建控件的线程访问它
转自原文 线程间操作无效: 从不是创建控件的线程访问它. using System; using System.Collections.Generic; using System.ComponentM ...
- System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”...
"System.InvalidOperationException"类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: ...
- 线程间操作无效,从不是创建控件的线程访问它。
最近在开发项目时用到了操作线程的问题,在新线程中写入了操作控件的代码如: this.btnToolUpload.Enabled = true; 但是在线程执行过程中,当执行到这段代码时提示:" ...
- 【转】“线程间操作无效: 从不是创建控件的线程访问它”
经典解决"线程间操作无效: 从不是创建控件的线程访问它" 在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个 ...
- C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它...
C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件"Form1"的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 usin ...
- 线程间操作无效: 从不是创建控件的线程访问它。
private void button1_Click(object sender, EventArgs e){//报错:从不是创建控件的线程访问它Thread t = new Thread(() =& ...
最新文章
- ASP.NET中随机数生成及应用
- 数据库范式的思考以及数据库的设计
- 如何不让php自动把times换成×号
- 当MVP与阿里云一起踏上西行远征——阿里云MVP“戈壁之路”徒步记行
- 局域网中传输介质的应用分析
- MyCat的安装及基本使用(MySQL分库分表)
- git的SSH上传方式
- idea使用svn拉取项目代码_idea下载svn的项目并且运行操作
- python中heading_python如何抓取几个csv的heading并存在excel里?
- Flowers Sky Wallet First school/Primary school holiday Getting up early Reading Home c
- 受益于人工智能的发展,人们可以以前所未有的时空分辨率系统地观察神经活动
- Python - 使用ffmepg批量转换某个文件夹以及所有子文件夹下所有的视频,修改其帧率/码率/分辨率到另一文件夹,并保留原有文件夹结构
- 使用 jquery.wordexport.js导出的Word排版
- 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数
- 分享一个好用的串口调试助手
- 格力机器人图解_格力空调拆机图解,这张图看完立马成专家
- dz论坛开启html,DZ论坛解决https开启后部分出现http的网址问题导致https不能显示方法...
- 【嵌入式开发教程8】手把手教你做平板电脑-Camera 驱动实验教程
- 也许你不知道,我们每个人都离不开云计算
- 【面经】Thoughtworks 大数据开发面经