收到的数据在我的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, 而不是在写。我使用微软视C#2008年表达的版本。谢谢。

有帮助吗?

解决方案

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());
   }
}

其他提示

如果 pUartData 是一个 List<char> 你可以加入的字的列表 .AddRange().

我不得不读这个问题2-3倍之前我就知道,这只是阵列追加的问题。(一开始我以为这是一个严重的串行通信的错误...笑)

Ok,

你可以使用 List<>ArrayList 类维持的动态数据。i。e加删除等。所以每次你收到的数据序列,只是添加到名单。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top