最近,在做一个使用线程控制下载文件的小程序(使用进度条控件显示下载进度)时,遇到这样的问题,

错误显示:

未处理的“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'”的线程访问它问题的解决方案及原理分析...相关推荐

  1. C# WinForm 线程间操作无效: 从不是创建控件的线程访问它的解决办法

    .net2后是不能跨线程访问控件的.,窗体上的控件是当前线程创建的,当用户异步执行一个方法:在该方法中给窗体上的控件赋值,记住:当执行一个异步委托的时候,其实 就是开了一个线程去执行那个方法,这样就会 ...

  2. C#线程间操作无效: 从不是创建控件 XX 的线程访问它

    转自:http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列 ...

  3. 黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...

    在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个时候程序会卡,当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作 ...

  4. 线程间操作无效: 从不是创建控件的线程访问它

    转自原文 线程间操作无效: 从不是创建控件的线程访问它. using System; using System.Collections.Generic; using System.ComponentM ...

  5. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”...

    "System.InvalidOperationException"类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: ...

  6. 线程间操作无效,从不是创建控件的线程访问它。

    最近在开发项目时用到了操作线程的问题,在新线程中写入了操作控件的代码如: this.btnToolUpload.Enabled = true; 但是在线程执行过程中,当执行到这段代码时提示:" ...

  7. 【转】“线程间操作无效: 从不是创建控件的线程访问它”

    经典解决"线程间操作无效: 从不是创建控件的线程访问它" 在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个 ...

  8. C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它...

    C# 委托 / 跨线程访问UI /  线程间操作无效: 从不是创建控件"Form1"的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 usin ...

  9. 线程间操作无效: 从不是创建控件的线程访问它。

    private void button1_Click(object sender, EventArgs e){//报错:从不是创建控件的线程访问它Thread t = new Thread(() =& ...

最新文章

  1. ASP.NET中随机数生成及应用
  2. 数据库范式的思考以及数据库的设计
  3. 如何不让php自动把times换成×号
  4. 当MVP与阿里云一起踏上西行远征——阿里云MVP“戈壁之路”徒步记行
  5. 局域网中传输介质的应用分析
  6. MyCat的安装及基本使用(MySQL分库分表)
  7. git的SSH上传方式
  8. idea使用svn拉取项目代码_idea下载svn的项目并且运行操作
  9. python中heading_python如何抓取几个csv的heading并存在excel里?
  10. Flowers Sky Wallet First school/Primary school holiday Getting up early Reading Home c
  11. 受益于人工智能的发展,人们可以以前所未有的时空分辨率系统地观察神经活动
  12. Python - 使用ffmepg批量转换某个文件夹以及所有子文件夹下所有的视频,修改其帧率/码率/分辨率到另一文件夹,并保留原有文件夹结构
  13. 使用 jquery.wordexport.js导出的Word排版
  14. 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数
  15. 分享一个好用的串口调试助手
  16. 格力机器人图解_格力空调拆机图解,这张图看完立马成专家
  17. dz论坛开启html,DZ论坛解决https开启后部分出现http的网址问题导致https不能显示方法...
  18. 【嵌入式开发教程8】手把手教你做平板电脑-Camera 驱动实验教程
  19. 也许你不知道,我们每个人都离不开云计算
  20. 【面经】Thoughtworks 大数据开发面经

热门文章

  1. python模块(4)-Collections
  2. 布朗桥python_MATLAB 里面有哪些加快程序运行速度的方法呢,求分享?
  3. STL源码剖析 迭代器iterator的概念 和 traits编程技法
  4. 嵌入式Linux多任务编程 进程 管道 命名管道
  5. 实际操作之路考的这些事
  6. 李国杰院士:国内开源社区的崛起需要一个过程
  7. 如此如此,怎能师夷长技以制夷!
  8. 基于SIMD的AVS整数反变换算法设计与优化
  9. Thymeleaf 简介、教程
  10. UDP:用户数据报协议 是什么