4

由于收集器数组被覆盖而不是附加,我的 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。谢谢。

4

3 回答 3

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());
   }
}
于 2010-05-06T15:44:54.530 回答
0

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

于 2010-05-06T15:43:33.313 回答
0

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

行,

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

于 2010-05-06T15:44:55.960 回答