2010-05-06 65 views
3

由于收集器阵列被覆盖而不是附加在我的C#应用​​程序中接收到的数据正在丢失。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速成版。谢谢。

回答

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

你可以一次性添加数据,而不是一个while循环 – SysAdmin 2010-05-06 15:48:03

+0

这是def true – Gabe 2010-05-06 15:49:00

0

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

0

我不得不读这个问题2-3次,才知道这只是在c#中的数组附加问题。 (起初,我认为这是一个严重的串行通信错误...大声笑)

好吧,

你可以使用一个List<>ArrayList类,以保持动态数据。即添加删除等。 因此,每次您从串口接收数据时,只需将其添加到列表即可。