C# 串口收发线程问题 界面卡死
软件与下位机是一问一答的方式,收到的数据包160个字节。
现在我使用timer控件来计时发送指令要数据,在received中委托处理
delegate void HandleInterfaceUpdateDelegate(byte[] text);
HandleInterfaceUpdateDelegate interfaceUpdateHandle = null;
interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(Update); //实例化委托对象
private void Update(byte[] _datas)
{
if (_datas.Length == 2)
{
tslab_rece.Text = String.Format(" 接收:{0} 字节 ", jsCount);
// EditState = byteToHexStr(_datas);
// msg.AppendText(byteToHexStr(_datas));//显示在textbox
Editstate(_datas);//数据处理,更改按钮等状态 多个控件被修改
}
if (_datas.Length == 160)
{
tslab_rece.Text = String.Format(" 接收:{0} 字节 ", jsCount);
EditBuf = byteToHexStr(_datas);
//msg.AppendText(EditBuf);
EditDatas(EditBuf);//160个字节的显示在界面上
EditErr(_datas);//状态栏显示 错误帧
}
}
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = sp.BytesToRead;//读取长度
byte[] readBuffer = new byte[n];
sp.Read(readBuffer, 0, n); //读入缓存
ArrayList_byte_R1.AddRange(readBuffer);
if (ArrayList_byte_R1.Count > 0 && ArrayList_byte_R1.Count < 160)
{
return;
}
if (ArrayList_byte_R1.Count == 160)
{
ArrayList_byte_R1.CopyTo(copydata);
jsCount = ArrayList_byte_R1.Count;
ArrayList_byte_R1.Clear ();
this.BeginInvoke(interfaceUpdateHandle, copydata);
}
}
这160个字节基本上全部要显示在界面的各种label控件上,还有四组要传递到form2中在zedgraph中绘图,整个程序运行起来开始计时器能工作,但是如果移动界面或者打开form2,界面就开始卡,数据也不发送了。
我不知道是不是我的思路就不对,应该怎么去修改才能保证界面更新,和数据收发,还有绘图这样的功能实现呢?
相关推荐
C#串口数据读写
C#串口数据读写。 包含读写串口。简单操作。
C#串口通信实战:SerialPort参数配置、数据收发与调试工具开发
串口通信是嵌入式与工业控制领域的基础技术,上位机与设备间的高效交互离不开对串口协议的深入理解。C#中的SerialPort类是Windows平台实现串口通信的经典方案,通过配置波特率、数据位、停止位与校验位,可构建稳定可靠的通信链路。然而实际开发中,数据接收的粘包与半包处理、UI线程更新限制、编码及十六进制转换等问题,常成为初学者与工程师的拦路虎。基于WinForm开发一款串口调试工具,将参数配置、实时收发、日志记录等功能工程化,不仅能提升设备调试效率,还可直接应用于产线自动化测试场景。本文围绕C#串口测试
C#串口通信16进制收发实战:SerialPort上位机源码解析
串口通信是嵌入式设备调试与工控领域最基础的数据交互方式,其本质是字节流的传输。在实际工程中,设备协议往往以16进制报文形式定义,如Modbus RTU指令,因此掌握16进制收发能力是开发稳定上位机的关键。C#提供的SerialPort类虽封装了底层细节,但参数配置、超时处理、字节与字符串的转换算法以及跨线程UI更新等问题,仍是初学者与工程师绕不开的坎。从通用技术概念出发,理解字节流与编码的差异,合理设计HexString与byte[]的双向转换,能够有效避免乱码、丢帧与程序崩溃。此类技术广泛应用于传感器数据
C#串口十六进制收发工具开发实战:核心原理与源码解析
串口通信是硬件与软件交互的基础环节,理解其背后的字节流传输机制是进行嵌入式开发与设备调试的必备技能。在实际工程中,数据往往以十六进制形式呈现,以便直观解析帧结构与协议字段,因此掌握字符串、字节数组与十六进制文本之间的转换尤为关键。C# 提供的 SerialPort 类封装了底层通信细节,使开发者能够快速构建可靠的上位机调试工具。一个功能完善的串口调试助手不仅能提升 Modbus、自定义协议等设备联调效率,还能在自动化测试、数据可视化等场景中发挥重要作用。本文从串口通信原理出发,系统讲解十六进制收发的核心处理
C# 串口接收数据中serialPort.close()死锁的实例
下面小编就为大家分享一篇C# 串口接收数据中serialPort.close()死锁的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


