SerialPort_DataReceived()//SerialPort的数据接收事件

本文介绍了一个用于处理串口接收数据的C#方法。该方法通过定义byte数组读取串口数据,并将其转换为十六进制字符串形式进行显示。文章详细展示了如何在接收到数据时避免重复标记接收状态,确保数据的准确读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

using System; public interface ICommunicationService { /// <summary>连接串口</summary> void Connect(string portName, int baudRate = 9600); // 提供默认波特率参数 /// <summary>断开串口连接</summary> void Disconnect(); /// <summary>发送命令</summary> void SendCommand(string command); /// <summary>串口连接状态</summary> bool IsConnected { get; } // 只读属性 /// <summary>数据接收事件</summary> event EventHandler<string> DataReceived; } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Ports; namespace DoubleArm.Services { public class SerialPortService : ICommunicationService { private SerialPort _serialPort; public bool IsConnected => _serialPort != null && _serialPort.IsOpen; public event EventHandler<string> DataReceived; public void Connect(string portName, int baudRate = 9600) { if (IsConnected) Disconnect(); try { _serialPort = new SerialPort(portName, baudRate) { Parity = Parity.None, // 完整串口配置 DataBits = 8, // 数据位 StopBits = StopBits.One // 停止位 }; _serialPort.DataReceived += SerialPort_DataReceived; // 注册接收事件 _serialPort.Open(); // 实际打开端口 Console.WriteLine($"成功连接"); // 调试输出 } catch (Exception e) // 异常处理 { Console.WriteLine($"连接失败:{e.Message}"); throw; // 向上传递异常 } } public void Disconnect() { if (_serialPort == null) return; // 空检查 if (_serialPort.IsOpen) { _serialPort.DataReceived -= SerialPort_DataReceived; // 解除事件绑定 _serialPort.Close(); Console.WriteLine("已断开连接"); } _serialPort.Dispose(); // 重要:释放资源 _serialPort = null; // 置空引用 } public void SendCommand(string command) { if (!IsConnected || _serialPort == null) throw new InvalidOperationException("未连接"); // 严谨状态检查 _serialPort.WriteLine(command); // 实际发送 Console.WriteLine($"发送命令:{command}"); // 调试日志 } private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (_serialPort == null || !_serialPort.IsOpen) return; // 安全性检查 string data = _serialPort.ReadLine(); // 读取一行数据 DataReceived?.Invoke(this, data); // 触发事件通知订阅者 } } }
最新发布
07-24
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值