C#中错误:线程间操作无效,从不是创建控件的线程访问它。
一、原因分析
跨线程调用控件会出现这个错误的原因是因为:.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误。 所以不是在创建控件所在的线程内调用就会发生这样的错误。
二、解决办法
方法1:设置CheckForIllegalCrossThreadCalls =false 是能去掉这个检查的,但是这不是标准的作法.
方法2:定义一个委托(delegate),委托(delegate)可以将参数与方法传递给控件所在的线程,并由控件所在的线程执行,通过Invoke来调用,这样可以完美的解决此类问题。
Action action = () =>{TimeBox.Text = TimeString;ResultBox.Text = hv_ResultStr;DisplayImageHalconWindow(AcqImage, GrayImage);DisplayImageHalconWindow(ThresholdImage, MeanImage);};Invoke(action);
三、总结
在控件的线程中遇到阻塞时可以通过创建另一个线程来解决界面的阻塞问题,例:new Thread(ImageDealThread).Start();将控件所需要处理的事件封装到一个函数里面,通过线程进行调用,跨线程访问控件可以通过定义一个委托(delegate)来将参数与方法传递给控件所在的线程,再通过Invoke来调用。
错误之处,欢迎大家指出!
C#中错误:线程间操作无效,从不是创建控件的线程访问它。相关推荐
- 线程间操作无效: 从不是创建控件的线程访问它。
private void button1_Click(object sender, EventArgs e){//报错:从不是创建控件的线程访问它Thread t = new Thread(() =& ...
- 黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...
在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个时候程序会卡,当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作 ...
- 【转】“线程间操作无效: 从不是创建控件的线程访问它”
经典解决"线程间操作无效: 从不是创建控件的线程访问它" 在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选.这个 ...
- 线程间操作无效: 从不是创建控件的线程访问它
转自原文 线程间操作无效: 从不是创建控件的线程访问它. using System; using System.Collections.Generic; using System.ComponentM ...
- c#报错 :System . Invalid Operation Exception:“线程间操作无效: 从不是创建控件的线程访问它
一.问题来源 跨线程操作时会报错:System.InvalidOperationException:"线程间操作无效: 从不是创建控件的线程访问它. 二.问题代码 using System; ...
- 线程间操作无效,从不是创建控件的线程访问它。
最近在开发项目时用到了操作线程的问题,在新线程中写入了操作控件的代码如: this.btnToolUpload.Enabled = true; 但是在线程执行过程中,当执行到这段代码时提示:" ...
- C# WinForm 线程间操作无效: 从不是创建控件的线程访问它的解决办法
.net2后是不能跨线程访问控件的.,窗体上的控件是当前线程创建的,当用户异步执行一个方法:在该方法中给窗体上的控件赋值,记住:当执行一个异步委托的时候,其实 就是开了一个线程去执行那个方法,这样就会 ...
- c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
如果代码是在VS2003中的话应该不会抛出这个异常,只有在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的 ...
- C#线程间操作无效: 从不是创建控件 XX 的线程访问它
转自:http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列 ...
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析...
最近,在做一个使用线程控制下载文件的小程序(使用进度条控件显示下载进度)时,遇到这样的问题, 错误显示: 未处理的"System.InvalidOperationException" ...
最新文章
- 如何直接将HTML代码加载到TWebBrowser
- Sharepoint学习笔记—ECMAScript对象模型系列-- 8、组与用户操作(一)
- 实验开篇介绍---开发板介绍
- linux目录表及功能n鸟哥,鸟哥linux私房菜_笔记_Linux的文件权限与目录配置
- Java适配器的设计模式
- LeetCode 287. Find the Duplicate Number
- (42)VHDL实现多路复用器(case)
- b+树的增删改查_考研计算机 | 如何理解m阶B树?
- oracle 网络访问配置tnsnames.ora文件的路径
- 谷歌浏览器整个网页截图方法
- 异常重试_面试题:如何基于 dubbo 进行服务治理、服务降级、失败重试?
- YACC介绍(译文)
- C++ WindowsAPI 教程:MessageBox函数详解(原创)
- 下载C语言标准库源码
- Java语言实现会议安排问题,利用贪心法思想解决问题
- php通过JODConverter将word转换为pdf
- 天融信TopApp-LB 负载均衡系统漏洞总结
- 为何说 a16z 是一家通过 VC 获利的媒体公司?
- 计算机组成原理之概述篇(一)
- 微信小程序教程-富文本编辑器editor