2012-12-21 33 views
4

我寫了一個應用程序,它將數據發送到COM端口並接收返回的數據。從串口收到的數據有不正確的換行符

發送作品很棒,但接收沒有。多行和只讀文本框中的新行字符不正確。

截圖:

enter image description here

我對接收的代碼是:

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) 
{ 
    byte[] data = new byte[_serialPort.BytesToRead]; 
    _serialPort.Read(data, 0, data.Length); 

    string str = System.Text.Encoding.UTF8.GetString(data); 

    textBox3.Text = textBox3.Text + str; 

    textBox3.SelectionStart = textBox3.TextLength; 
    textBox3.ScrollToCaret(); 
} 

並打開端口之前我設置新線屬性\ r \ n爲

_serialPort.NewLine = "\r\n"; 

如何解決這個問題?

回答

1

試試這個:

_serialPort.NewLine = Environment.NewLine; 
+1

這種方法可能出現的問題是,由於數據通過COM口進來的,很可能來自另一臺可能使用或不使用相同環境的計算機(或者甚至是相同的操作系統)。 – Kevin

4

the documentation

獲取或設置用來解釋到 的ReadLine和WriteLine方法調用結束時的價值。

關鍵還有就是它的使用解釋呼叫結束,不設置它。

NewLine屬性處理SerialPort對象如何嘗試解釋傳入數據。它不處理傳入的數據。

換句話說,通過塞汀換行屬性設置爲「\ r \ n」你告訴它要「\ r \ n」和使用,作爲一個換行符。

進入串口的數據是什麼。你不能改變別人發送數據的方式。 (除非您也編寫該應用程序。)您只能告訴SerialPort如何嘗試正確讀取數據。

你需要做的是找出程序發送的內容,並將.NewLine屬性設置爲。最有可能的只是發送「\ n」或「\ r」,所以如果你設置NewLIne屬性匹配,你的程序將開始正確識別發送給它的換行符。

有一點的詳細信息可在SerialPort.ReadLine Property Usage

1

解決方案幫助是:

textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n"); 
相關問題