2010-05-06 4 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 Express Edition을 사용하고 있습니다. 감사.

답변

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

+0

이는 true입니다. – Gabe

0

pUartDataList<char> 인 경우 수신 문자를 .AddRange()과 함께 목록에 추가 할 수 있습니다.

0

나는 이것이 단지 C#의 배열 추가 문제라는 것을 알기 전에이 질문을 2-3 번 읽어야했다.

좋아,

당신은 동적 데이터를 유지하기 위해 List<> 또는 ArrayList 클래스를 사용할 수 있습니다 (처음에 나는이 ... 롤 심각한 시리얼 통신 오류라고 생각). 즉 제거 등을 추가하십시오. 시리얼에서 데이터를 수신 할 때마다 목록에 추가하기 만하면됩니다.