2010-05-06 44 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類,以保持動態數據。即添加刪除等。 因此,每次您從串口接收數據時,只需將其添加到列表即可。