C#中线程间操作无效: 从不是创建控件 txtBOX 的线程访问它。
delegate void 委托名(方法名);
void 方法名()
{
if(txtBox.invokeRequered)
{
委托名 d=new 委托名();
txtBox.invoke(d);
}
else
{
具体的执行语句
}
}
原来是存在跨线程调用控件的问题
解决方法有两种:第一是加一句话,第二是用委托。因为一句话成功了 我就没有用委托了~
1.解决方法就加了一句话
private void mycomm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
////////////////////线程开始的时候加这么一句
Control.CheckForIllegalCrossThreadCalls = false;
string str = mycomm.ReadExisting().ToString();
txtreceive.Text = txtreceive.Text + str;
}
ok 程序就运行成功了~
第二:
用委托,在05里,每个控件都有个InvokeRequired的属性~
判断一下是不是true,是的话进行Invoke操作的,完事了~
//建立个委托private delegate void ShowDelegate(string strshow);
public void Show(string strshow)
{
if (this.txtreceive.InvokeRequired)
{
// this.txtreceive.BeginInvoke(new ShowDelegate(Show), strshow);//这个也可以
this.txtreceive.Invoke(new ShowDelegate(Show), strshow);
}
else
{
this.txtreceive.Text += strshow;
}
}
第一种方法只是简单的将错误提示禁用了,仍然存在跨线程调用控件的问题。为此可能造成两个线程同时或者循环改变该控件的状态导致线程死锁。
Invoke方法是同步的方法,所以执行过程是有先后顺序的,所以就不会出现那个异常了 最好是用第二种方法
C#中线程间操作无效: 从不是创建控件 txtBOX 的线程访问它。的更多相关文章
- 关于“线程间操作无效: 从不是创建控件’textBox1‘的线程访问它”异常的解决方法
线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Window ...
- 004. 线程间操作无效: 从不是创建控件“textBox1”的线程访问它
最简单的方法(不推荐): 在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false; 为什么不推荐上面的方法: 为避免空间造成死锁, .net f ...
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 ...
- 从.NET 1.1 升级到.NET 4.0 遇到 线程间操作无效: 从不是创建控件 [XX] 的线程访问它.
有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数 问题原因是 .NET2.0 以后拒绝 ...
- System.InvalidOperationException:“线程间操作无效: 从不是创建控件“btnSearch”的线程访问它。
System.InvalidOperationException:“线程间操作无效: 从不是创建控件“btnSearch”的线程访问它.”这个问题属于跨线程问题 在Form1重载中写上一行代码 Sys ...
- System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”
“System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: 从不是创建控件“tx ...
- C#: 线程间操作无效: 从不是创建控件“dataGridView”的线程访问它
最近在修改自动化小工具,用多线程来解决后台拷贝导致WinForm界面卡死的情况,但是遇到过错:线程间操作无效: 从不是创建控件“dataGridView”的线程访问它. 这是因为在多线程程序中,新创建 ...
- 【转】线程间操作无效: 从不是创建控件“textBox2” 的线程访问它。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- C#报错"线程间操作无效: 从不是创建控件“XXX”的线程访问它"--解决示例
C# Winform程序中,使用线程对界面进行更新需要特殊处理,否则会出现异常“线程间操作无效: 从不是创建控件“taskView”的线程访问它.” 在网文“http://www.cnblogs.co ...
随机推荐
- 在Mac OSX下使用ssh建立隧道(在Windows下建立隧道可以使用putty,其间会用到ppk文件)
在Windows下建立隧道可以使用putty,其间会用到ppk文件.在Mac OSX下,同样的功能可以用ssh命令实现.具体是: ssh -D 8088 -Nf user@ip -i myppk.ss ...
- Windows 64 位下安装 psyco 1.6
用 eclipse 运行 python 的时候,第一行总是有红色提示:没有安装 psyco,程序可以正常运行但是会有一点慢.于是就干脆装上吧,红色的提示还是越少越舒服. 百度了一下,在这里,http: ...
- OSGI资料
http://osgi.codeplex.com/ http://www.iopenworks.com/
- android核心系列--1,组件生命周期
一,进程模型及进程托管 1,一个APP应用是由一个或多个组件构成的,这些组件可以运行在一个进程中,也可以分别运行在多个进程中: 进程的构造和销毁是由系统全权负责的. 2,一个应用进程只有一个应用环境对 ...
- vuejs 项目引入微信jssdk
一.导入依赖包 npm i -S weixin-js-sdk 二.前端页面使用 import wx from 'weixin-js-sdk' export default { created() { ...
- c/c++基础内容回顾
1.1基本数据类型 1.1.1 变量的定义 变量类型 变量名 变量类型 变量名=初值: 注意:不能以C语言标识符作为变量名,变量名的第一个字符必须是字母或者下划线,其它位置字符必须是字母.数字.下划线 ...
- 【设计模式】行为型02模板方法模式(Template Method Patten)
五一长假,没有出去,不喜欢嘈杂的人群,玩了会游戏发泄了下憋在心底的戾气,手旁大马克杯里是母亲泡的绿茶.点开自己的播放列表,耳机里传来的是理查德克莱德曼的致爱丽丝.自己是个凡人,卑微渺小的活着.不说废话 ...
- 19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略
- Visual Studio中View页面与Js页面用快捷键互相跳转
现在已经将源码放到GitHub中了 地址是 https://github.com/liningit/ViewJsLN 公司开发的项目使用的是Mvc框架,且Js与View页面是分开在两个文件夹下的,所以 ...
- java-NIO-FileChannel(文件IO)
Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 对于文件的复制,平时我们都是使用输入 ...