C# 串口数据侦听的实现

本文探讨了在C#中通过串口进行数据接收时可能遇到的问题,尤其是数据不完整的问题。作者指出,设置ReceivedBytesThreshold为1可能导致数据分段接收。解决方案包括将阈值设为期望的字节数或使用线程监控方法。文中提供了一个内部类CommReader的实现,该类使用单独的线程周期性读取串口数据,确保数据完整。

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

 

版权声明:

本文由sxwd_forever完成,首发于优快云,未经许可,不得使用于任何商业用途.

欢迎转载,但请保持文章及版权声明完整。

如需联络请发邮件:sxwd_forever(AT)126.com

 

    相信很多和我一样需要编程操纵硬件的人都遇到过这样的问题,就是通过串口来接收硬件发来的数据,或是通过串口向硬件发送某种格式的命令。在C#平台上,编写串口通讯程序是一件非常简单的事情。废话少说,入正题~

    网上众多C#串口编程的例子,主要讨论的都是如何侦听串口数据(向串口写数据较为简单,略),仿照例子,我编写了如下代码来侦听数据:

 
using System.IO.Ports;
namespace SerialTest
{
  public class SerialTest
  {
    //串口对象
    private SerialPort _Comm = null;

    //串口控件初始化
    public void Init()
    {
      _Comm = new SerialPort();
      //串口参数设定
      _Comm.BaudRate = 9600;
      _Comm.Parity = Parity.None; //Parity为C#预定义枚举型变量
      _Comm.DataBits = 8;
      _Comm.StopBits = StopBits.One; //StopBits为C#预定义的枚举量
      _Comm.PortName = "COM1";//假定串口名为COM1

      //为控件添加事件处理函数 
      _Comm.DataReceived +=
        new SerialDataReceivedEventHandler(CommDataReceived);
      //串口控件成员变量,字面意思为接收字节阀值,
      //串口对象在收到这样长度的数据之后会触发事件处理函数
      //一般都设为1
      _Comm.ReceivedBytesThreshold = 1;
      try
      {
        _Comm.Open(); //打开串口
      }
      catch (Exception e)
      {
        Console.WriteLine("串口打开失败");
      }
    }

    //串口数据处理函数
    public void CommDataReceived
    (Object sender, SerialDataReceivedEventArgs e)
    {
      //Comm.Byte
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值