C# 线程间操作无效

C# 工控开发日记001:Winform报错_线程间操作无效 传送门原程序架构出现的问题解决思路总结 原程序架构 此程序有一功能是通过ListBox记录按钮操作,包含【Initialize】、【Disable】、【Read Volt】和【Keep Read】。 其中【Initialize】、【Disable】、【Read Volt】按钮均是单次读取,并没有使用线程,所以能直接在按钮事件中对ListBox执行Iteam.Add()方法。如下举例Disable按钮的事件处理,应该很好理解。 private void btnDisable_Click(object send 阅读详情

最近在写串口通信

 

今天中午突然遇到一个问题

 

我在serialport的DataReceived事件中访问 主界面的控件 突然出现了下面的错误

 

 

经过百度 google 知道  这是由于线程安全所造成的 VS2005及以上新增的一个特性

 

访问非自己线程的东西 会发生如上类似的错误

 

 解决的方法如下

 

从程序设计上来说,只有创建界面的主线程才能访问界面上的控件,所以会出错.

当然,设置CheckForIllegalCrossThreadCalls =false 是能去掉这个检查的,但是这不是标准的作法.


标准的作法是在访问界面控件时,访问下窗体的 InvokeRequired 属性,如果为false就可以直接访问,

 

否则就是跨线程访问;此时,创建一个delegate,并通过Invoke() 来调用它.


详细的信息,可以在网上搜一下C#的跨线程访问,这方面的资料很多.

C#学习(二十二)——线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它 //我有一个方法,从服务里取数据然后赋值给datagirdview private void ReadDgv() { QM_LabBill.WebService1SoapClient aa = new QM_LabBill.WebService1SoapClient(); dataGridView1.DataSource = aa.getYGDay(); } //然后在窗体加载的时候用线程读取数据 private void FmDgv_Load(object sender, EventArgs e) { T 阅读详情

相关推荐

C# 避免 线程间操作无效 报错

在调用外部exe代码中,如果需要修改窗体控件属性,都会报错: System.InvalidOperationException:线程间操作无效……

dgnankai的专栏 367

[转]C#串口serialPort操作

现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍。例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算机上,那么利用串口通信就可以实现。运行本程序,在“发送数据”文本框中输入要传送的数据,单击【发送】按钮,将传送的数据发送到所选择 的端口号中;单击【接收】按钮,传递的数据被接收到“接收数据”文本框中。如图13.1所示。   技术要点  在.NE...

weixin_30550081的博客 1000

ArcGIS小白必看:5分钟搞定shp矢量文件分割(附常见错误排查)

本文为ArcGIS新手详细解析了分割shp矢量文件的四种核心方法:裁剪工具、分割工具、按属性选择导出及ArcPy脚本自动化。重点强调了投影匹配等关键步骤,并提供了常见错误排查指南,帮助用户快速掌握矢量数据分割技巧,提升GIS数据处理效率。

h9j8k7l6m5n的博客 798

串口通讯中消息收发顺序控制及多线程问题

具体描述:当发送一条消息后,在收到数据之后才能算正常流程走完,再执行其他数据的发送。

月光使者的博客 824

Flutter加载本地HTML的优雅解决方案:轻松实现富文本展示

通过以上步骤,我们实现了Flutter加载本地HTML的完整流程,并简单介绍了如何通过WebView与HTML页面进行交互。HTML文件作为一种灵活、易维护的富文本展示方式,能有效提升Flutter应用的内容呈现能力。这种方法在展示新闻、资讯或帮助文档等内容时非常有用,能够让开发者灵活调整内容的样式和排版。希望这篇文章能对你在Flutter开发中的HTML加载有所帮助!

四楼没电梯的专栏 3644

SAP-MM-采购申请字段解析

采购申请抬头以及行项目字段解析

yanzibing99的博客 7306

C# 使用SerialPort控件用类及线程实现串口通信

using System;      using System.Collections.Generic;      using System.ComponentModel;      using System.Data;      using System.Drawing;      using System.Text;      using System.Windows.Forms;

Tianqin20140902的专栏 9357

VS2019 从零构建 OSG+OSGEarth+OSGQt 开发环境实战指南

本文提供了一份详细的实战指南,指导开发者如何在Windows系统下使用VS2019从零开始编译和配置OSG、OSGEarth与OSGQt开发环境。文章涵盖了从环境准备、源码获取、CMake配置、Visual Studio编译到最终测试的完整流程,并分享了关键的避坑技巧,旨在帮助三维GIS与可视化开发者高效搭建稳定、可控的专业开发平台。

weixin_28826961的博客 367

SerialPort.DataReceived之“管收不管埋”

通过把SerialPort进行封装,以多线程和缓存的方式处理串口的发送和接收动作。 一、现象     不管如何设置ReceivedBytesThreshold的值,DataReceived接收到的数据都是比较混乱,不是一个完整的应答数据。 二、原因 1、上位机下发的命令比较密集,以200ms周期发送实时状态轮询命令。 2、在状态实时轮询命令中间有操作命令插入。 2、不同的命令,接收的应

action20的专栏 1836

YOLO11全网首发优化:卷积魔改创新 | AAAI 2025 | 一种新颖的风车形卷积(PConv)符合微弱小目标的像素高斯空间分布,增强特征提取,显著增加接受野

我们提出了一种新颖的风车形卷积(PConv)作为骨干网络下层标准卷积的替代品。PConv能更好地符合微弱小目标的像素高斯空间分布,增强特征提取,显著增加接受野,且只引入最小的参数增加。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1973

运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案

本文主要介绍了运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案,希望能对学习和使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

c#中serialPort1_DataReceived串口接收事件处理

1.缓冲区不定字节读取(波特率很高也没问题) //Thread.sleep(1000);//处理事件这块可以加上延时确保不定数的数据可以全部收到缓冲后,才去读缓冲内容--单位:毫秒 byte[] data = new byte[serialPort1.BytesToRead]; //定义缓冲区,因为串口事件触发时有可能收到不止一个字节 serialPort1.R...

weixin_30300523的博客 2600

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 726

c# 线程间操作无效—从不是创建控件的线程访问它,解决办法

是在多线程应用程序中,当一个线程尝试访问或修改UI控件时,如果该线程不是创建控件的线程,就会引发线程间操作无效错误。方法来将操作委托给创建控件的线程执行。这样可以确保UI控件的访问和操作在正确的线程上进行。解决这个问题的一种常见方法是使用。C#中的线程间操作无效。

weixin_46158019的博客 1万+

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作

8245

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

c# 线程间操作无效

多线程调试 Form1.CheckForIllegalCrossThreadCalls = false; 建议采用网络 上另一种 Invoke  C#   小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法 在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或 ComboBox中候选。这个时候程序会卡,当程序员将这些卡代

Sky 的专栏 1192

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

用CheckForIllegalCrossThreadCalls 属性解决C#线程间操作无效

问题描述:在主线程里开个子线程,用子线程去New一个窗体FrmInitialize,并Show出来,在主线程中访问子线程中Show的窗体的控件,需传值给控件 Main.cs static class Main {       static FrmInitialize frmInit = null;       public static bool Login()    {

ymmeng的专栏 763

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# 线程间操作无效

转载出处 许多新学习C#的新手进行界面操作的时候,在启用新线程时操作界面元素经常会遇到的问题,我曾经也是,特此来分享下经验: 以下面小列子为例,给出这个问题的解决办法。下面的列子是以一个计数器为列讲解的。 public Form1() { InitializeComponent(); } private void btnStart_Click(object sende

Dark的博客 1万+

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

C#线程间操作无效: 从不是创建控件" XX" 的线程访问它 转自:http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列子为例,给出这个问题的解决办法。下面的列子是以一个计数器为列讲解的。 public Form1() { I

ABCDE201201的博客 700

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

C#线程间操作无效: 从不是创建控件" XX" 的线程访问它 转自:http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列子为例,给出这个问题的解决办法。下面的列子是以一个计数器为列讲解的。 public Form1() { InitializeComponent(); } private void btnStart_Click(object sender,

u014090257的博客 531

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

前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列子为例,给出这个问题的解决办法。下面的列子是以一个计数器为列讲解的。 public Form1() { InitializeComponent(); } private void btnStart_Click(object sender, EventArgs e) { // 创建线程 Thread newThread = new Thread(new ThreadStart(Count)); newThread.Start();

Kevin__Mei的博客 486

C#线程间操作无效

在项目中用到监测,在过程中想将完成或者错误的信息显示在界面上,直接写总报错 【C#线程间操作无效: 从不是创建控件" XX" 的线程访问它】 网上搜集一下发现: 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。 还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要 因此网上也有几种解决方案,第一种不赞同,直接把CheckForIllegalCrossThreadCa...

912

c#线程问题:线程间操作无效:从不是创建控件 的线程访问它InvalidOperationException异常

c#线程问题:线程间操作无效:从不是创建控件 的线程访问它InvalidOperationException异常c#线程问题:线程间操作无效:从不是创建控件 的线程访问它InvalidOperationException异常 2008年07月16日 星期三 15:09 摘自http://hi.baidu.com/zzticzh/blog/item/ee4e89020a89a6094bfb5

bowone的专栏 640

C#窗体运行提示线程间操作无效: 从不是创建控件的线程访问它

笔者在写c#窗体项目时候,碰到了线程间操作无效: 从不是创建控件的线程访问它这个异常。 这个异常得原因就是: 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。 出错的情形: 所以在某...

写Bug小能手 1万+

海康检测结果导出至c#(“线程间操作无效_ 从不是创建控件“textBox1”的线程访问它)

使用海康检测部件缺陷,c#进行二次开发并将检测结果放置到dataGridView中。报警:线程间操作无效: 从不是创建控件“textBox1”的线程访问它 操作完毕后可以得出相应的结果

m0_56265052的博客 422
上一篇: C# WinForm打开PDF文件
下一篇: 微软自己扇自己耳光??
wenjunsu
博客等级 码龄19年 73粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值