C#串行通信 - 收到的数据丢失

时间:2010-05-06 15:35:50

标签: c# serial-communication

我的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。感谢。

3 个答案:

答案 0 :(得分: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());
   }
}

答案 1 :(得分:0)

如果pUartDataList<char>,您可以使用.AddRange()将传入的字符添加到列表中。

答案 2 :(得分:0)

在我知道这只是c#中的数组追加问题之前,我必须阅读这个问题2-3次。 (最初我认为这是一个严重的串行通信错误...大声笑)

确定,

您可以使用List<>ArrayList类来维护动态数据。即添加删除等 因此,每次从串行接收数据时,只需将其添加到列表中即可。