【问题标题】:C# Serial Communications - Received Data LostC# 串行通信 - 接收到的数据丢失
【发布时间】:2010-05-06 15:35:49
【问题描述】:

由于收集器数组被覆盖而不是附加,在我的 C# 应用程序中接收到的数据正在丢失。

  char[] pUartData_c;

  private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  {
     try
     {
        pUartData_c = serialPort1.ReadExisting().ToCharArray();
        bUartDataReady_c = true;
     }
     catch ( System.Exception ex )
     {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
  }

在此示例中,pUartData_c 在每次接收到新数据时都会被覆盖。在某些系统上,这不是问题,因为数据来得足够快。但是,在其他系统上,接收缓冲区中的数据并不完整。如何将接收到的数据附加到pUartData_c,而不是覆盖它。我正在使用 Microsoft Visual C# 2008 Express Edition。谢谢。

【问题讨论】:

    标签: c# serial-communication


    【解决方案1】:
    private SerialPort sp;
    private List<byte> byte_buffer = new List<byte>();    
    
    private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
       byte_buffer.Clear();
    
       while (sp.BytesToRead > 0)
       {
          byte_buffer.Add((byte)sp.ReadByte());
       }
    }
    

    【讨论】:

    • 你可以一次性添加数据,而不是 while 循环
    【解决方案2】:

    如果pUartDataList&lt;char&gt;,您可以使用.AddRange() 将传入字符添加到列表中。

    【讨论】:

      【解决方案3】:

      在我知道这只是 c# 中的数组追加问题之前,我必须阅读这个问题 2-3 次。 (一开始我以为这是一个严重的串口通信错误...lol)

      好的,

      您可以使用List&lt;&gt;ArrayList 类来维护动态数据。即添加删除等。 所以每次从串口接收数据时,只需将其添加到列表中即可。

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 1970-01-01
        • 2011-06-01
        • 2019-12-10
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 2019-04-21
        • 1970-01-01
        相关资源
        最近更新 更多