社区
C#
帖子详情
C#编写串口数据收发程序,收发很频繁,开了三个线程:接收、处理、发送,但界面切换很卡,求教线程处理机制,最好能提供参考或修改代码,谢谢大神啦~
solsolmi89322
2016-04-20 11:33:26
C#编写串口数据收发程序,点击界面按钮发送指令数据,等待接收返回的数据,此外还有周期性数据需要不断接收;接收到的数据要判断重复帧和是否是最后一帧,然后去掉帧头帧尾并显示在界面控件内;目前程序开了三个线程:接收、处理、发送,三个线程都是一直循环判断指针是否有更新,但这样导致界面切换太卡,请问该怎么处理这三个线程之间的关系才能使界面切换流畅呢,初学C#,如果能给出具体修改代码方法更佳,请大神帮帮忙啊~急!
...全文
924
6
打赏
收藏
C#编写串口数据收发程序,收发很频繁,开了三个线程:接收、处理、发送,但界面切换很卡,求教线程处理机制,最好能提供参考或修改代码,谢谢大神啦~
C#编写串口数据收发程序,点击界面按钮发送指令数据,等待接收返回的数据,此外还有周期性数据需要不断接收;接收到的数据要判断重复帧和是否是最后一帧,然后去掉帧头帧尾并显示在界面控件内;目前程序开了三个线程:接收、处理、发送,三个线程都是一直循环判断指针是否有更新,但这样导致界面切换太卡,请问该怎么处理这三个线程之间的关系才能使界面切换流畅呢,初学C#,如果能给出具体修改代码方法更佳,请大神帮帮忙啊~急!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
solsolmi89322
2016-04-22
打赏
举报
回复
界面显示写在了处理serialPort1.DataHandled()函数的后半部分,对数据帧处理后,将纯数据放入缓冲区,然后根据标识字判断接收到的是什么数据,是自检结果还是其他的等等,再相应地显示在界面控件中,已经能成功显示。主要是不会处理接收、处理和发送线程,异步接收,将”数据处理“任务注册给系统线程池去自动分配,发送消息用 BeginSend 或者将 Send 语句注册给系统线程池,具体怎么写代码呢,求好心大神有可参考的代码实例吗?
以专业开发人员为伍
2016-04-21
打赏
举报
回复
你仔细看上面的编程设计模式就会发现,所谓”生产者-消费者 模式“是最垃圾的观念,表面上看起来好像很漂亮,实际上”生产者-消费者“模式中间纠结一个所谓”队列“,这就造成了误以为”三个线程、两个队列“的低效设计! 你会发现,真正的异步多线程编程,顶多借用到.net 系统线程池就够了,而且代码极其简单,你自己根本不需要任何队列,也不需要任何死循环的轮询线程。
以专业开发人员为伍
2016-04-21
打赏
举报
回复
”三个线程“本身就是问题根源。 接收数据,比较干净的做法就是要异步接收。当没有数据来的时候,一个线程都不会占用/阻塞,不会空耗CPU。如果你纠结于用一个线程在那里轮询,这是最为业余的通讯程序编程思路了。 当要处理数据时,瞬间在内存中可能有1个线程,也可能有10个线程,将”数据处理“任务注册给系统线程池去自动分配。如果你纠结于只用单线程在那里排队处理,这本身就是最低级的做法了。 发送消息,本身就是异步并发处理的,也就是 BeginSend 或者将 Send 语句注册给系统线程池。也不会纠结于一个线程在那里低效率地区轮询什么”队列“。
郑州高新区WPF小王子
2016-04-21
打赏
举报
回复
1
处理 搞一个线程就行了。接受 有方法触发,将接受的数据 存放到队列中,使用线程处理队列中的数据。 点击界面按钮发送指令数据 -》这个也不需要线程,点击进行 串口写入数据。不过要控制 点击频率。
为轮子而生
2016-04-21
打赏
举报
回复
没看到与界面有关的代码
圣殿骑士18
2016-04-21
打赏
举报
回复
没看到你代码里哪段是操纵界面显示的。但显然线程和界面交互时,要使用BeginInvoke
稳定与高效:
C#
优化
串口
通信性能的核心技巧
工业
串口
通信优化指南:提升
C#
SerialPort性能与稳定性 摘要:在工业自动化上位机
开
发中,RS232/RS485
串口
通信常因
代码
优化不足导致
数据
丢包、延迟波动等问题。本文针对
C#
SerialPort
开
发提出三点核心优化方案:1)合理配置缓冲区大小、流控参数和超时机
制
;2)用独立后台
线程
替代不稳定的DataReceived事件驱动;3)采用ArrayPool内存池和环形缓冲区实现零拷贝
处理
,降低GC压力。通过
接收
模型重构、异常
处理
优化和内存管理改进,可显著提升多路
串口
并发性能,实现毫秒级响应和7×2
高并发场景下:
C#
工业通信多
线程
安全与
数据
队列优化
工业通信高并发安全解决方案 摘要(150字): 工业场景的高并发与互联网有本质区别,核心在于半双工协议与多
线程
业务间的矛盾。盲目增加
线程
数会导致串包、
数据
错乱等问题。本文提出分层解耦的设计原则:1)连接层采用请求队列+单工作
线程
模式,确保协议时序正确;2)
数据
层通过双缓冲、原子操作实现无锁读写;3)业务层用队列削峰+批量
处理
提升吞吐量。方案经百台设备、万点采集验证,在保证
数据
一致性的前提下显著提升系统稳定性与效率,解决了工业通信中多
线程
安全与性能优化的关键问题。
工业级稳定实战:
C#
PLC通信的断线重连与
数据
容错机
制
深度落地
工业软件的稳定性,从来不是靠某一个技巧实现的,而是一套体系化的工程设计。从底层的连接生命周期管理,到中间的
数据
校验过滤,再到上层的业务状态兜底,每一层都要把异常情况考虑周全。很多人觉得工业通信很简单,发几个报文读几个寄存器就行,但真正拉
开
差距的,就是对这些异常场景的
处理
深度。能跑起来只是及格,在各种恶劣环境下稳定跑、不出错、不用人盯,才是真正的工业级水平。
Windows平台
C#
编写
的IT6433直流电源USB控
制
工具,带电压电流设置与实时监测
一款
开
箱即用的Windows桌面
程序
,用
C#
开
发,专为艾德克斯IT6433直流电源设计,通过USB
串口
(需已安装官方VCP驱动)实现本地PC直连控
制
。支持设定输出电压、电流限值,一键
开
启/关闭输出,同时持续读取并显示当前实际电压、电流测量值。
程序
基于.NET Framework 4.x,采用标准WinForms
界面
,结构清晰:主窗体Form1负责交互,CITECHUSB.cs封装底层USB通信,ControlItech6433.cs集中
处理
电源指令协议。解决方案包含完整Visual Studio工程文件(.
单片机
串口
通信(UART)从原理到实战:协议、驱动、调试与项目应用
串口
通信(UART)是嵌入式系统与外部世界进行
数据
交换最基础、最广泛采用的异步串行通信方式。其核心原理基于事先约定的波特率实现位同步,通过起始位、
数据
位、校验位和停止位构成
数据
帧。这项技术的价值在于其协议简单、硬件资源要求低,几乎成为所有微控
制
器的标准外设,是学习I2C、SPI等更复杂通信协议的基石。在工程实践中,
串口
通信是单片机
程序
调试、固件升级、传感器
数据
读取以及与上位机软件交互的核心通道。通过设计包含帧头、长度和校验的通信协议,并采用中断或DMA等高效
数据
收发
模式,可以构建稳定可靠的
数据
链路。本文聚焦
C#
111,129
社区成员
642,532
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章