C# 串口接收的优化处理

C# 串口接收的优化处理


引言

在VS中实用串口接收通讯的时候往往会遇到等待数据或需要解决接收数据效率的问题。这里小结一种比较实用的的方法,其通过线程接收来控制协调,约束时间和数据极限大小来输出处理,大大提高了数据处理的效率。这里为了简要说明,省略了线程部分开启部分。
一段经典的代码往往解决用户实际实用的痛点又能提高代码的效率。

......
namespace app
{
   public partial class Form1 : Form
   {
    
        private const int UART_COUNT_MAX = 512;
       //定义线程 
       Thread listenThread;
       public bool rx_thread_stop_flag = false;//线程停止标志

 		public Form1()
       {
  			    InitializeComponent();
  			    //在这里可以或者其它控件启动接收线程
        }

......
       
       /// <summary>
       ///  串口数据接收线程循环程序
       /// </summary>
       public void ReceiveData()
       {
           //接收线程
           int len = 0;
           string rx_data = "";
           while (_serialPort.IsOpen && !rx_thread_stop_flag)//线程循环
           {
               len = this._serialPort.BytesToRead;//获取当前的串口数据长度
               Thread.Sleep(20);//间隔20ms
              //判断数据长度是否有变化//判断数据是否超过最大值
               while (len < this._serialPort.BytesToRead && len < UART_COUNT_MAX)
               {
               	//在长度范围内有数据变化就循环累加
                   len = this._serialPort.BytesToRead;
                   //时间继续累加
                   Thread.Sleep(20);
               }

               if (len > 0)//有数据则接收处理数据
               {
                   SerialPortEventArgs args = new SerialPortEventArgs();
                   byte[] data = new Byte[len];
                   try
                   {
                       this._serialPort.Read(data, 0, len);   //向串口中读取数据
                       rx_data = System.Text.Encoding.UTF8.GetString(data);
                        
                       //这里添加数据处理的代码,处理rx_data 
                       
                   }
                   catch (Exception)//异常处理
                   {
                       MessageBox.Show("数据接收失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       return;
                   }
               }

           }

       }

       /// <summary>
       /// 接收串口读取数据
       /// </summary>
       public class SerialPortEventArgs : EventArgs
       {
           public byte[] receivedBytes = null; // 用来接收串口读取的数据
       }
   }
}

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: C是程序设计语言中的一种,它是由贝尔实验室的丹尼斯·里奇在20世纪70年代开发的。C语言被广泛应用于系统软件和应用软件的开发中。 C语言具有简洁、高效和灵活等特点,因此在各种平台上都能很好地运行。它是一种面向过程的语言,能够通过编写函数来实现不同的功能。 学习C语言对于程序员来说是非常重要的,因为很多编程语言都是基于C语言开发的。掌握了C语言的基础知识,可以更容易地学习其他语言。 C语言具有广泛的应用领域,比如操作系统、数据库、嵌入式系统等。它支持底层的硬件操作,以及高级的数据结构和算法。因此,C语言被广泛应用于各种开发项目中。 C语言也有一些不足之处,比如没有面向对象的特性,需要程序员手动管理内存等。但是,这些问题可以通过其他编程语言来弥补或优化。 总的来说,C语言是一种非常重要的编程语言,学习它可以提高程序员的编程能力,并为他们进一步学习其他语言打下坚实的基础。 ### 回答2: c是一个常见的字母,属于拉丁字母中的第三个字母。它在英语单词中经常被使用,也在其他一些语言中存在。C在音标中有两种发音,分别是/k/和/ʃ/。 在英语中,C通常与字母H结合在一起,形成一种特殊发音。比如,CH可以发音为/tʃ/,如"chair"(椅子)和"cheese"(奶酪)。C也可以与字母K组合起来,形成一种相似的发音,比如"cat"(猫)和"kite"(风筝)。 此外,C还可以与字母S结合,发音为/s/,如"city"(城市)和"ceiling"(天花板)。 C在数学中也常常被用来表示一个常数,即光速。根据爱因斯坦的相对论理论,光在真空中的速度是一个恒定的值,通常用C来表示,其值为299,792,458米每秒。 总之,C是一个常见的字母,既可以表示特定发音,也可以作为数学中的常数,具有广泛的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星papa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值