2011-04-03 104 views
0

我通過串行端口接收輸入並在RichTextBox中顯示數據。這是行得通的,除了當我顯示數據時,還有很多額外的(不一致的)間距。請參見下面的圖像:爲什麼RichTextBox中的奇怪間距

enter image description here

在這種情況下,它被示出每兩個蜱,但有時是三個或有時無。我無法弄清楚這是爲什麼。有人有任何想法嗎?

編輯:這是我如何顯示數據(代碼方式)。

void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    string msg = port.ReadExisting(); 
    DisplayWindow.AppendText(msg); 
    DisplayWindow.ScrollToCaret(); 
} 
+0

也許數據中有CR和/或LF字符? – dtb 2011-04-03 21:51:46

+0

你用什麼代碼附加到文本框? – ChrisF 2011-04-03 21:52:07

+0

@ChrisF - 更新了我用來更新RTB的代碼。 – JasCav 2011-04-03 22:03:39

回答

0

謝謝Hans和ChrisF的迴應。當我正在處理這個問題時,我決定在ReadExisting()上進行搜索。通過一些SO帖子,事實證明這可能是我的問題。我將其更改爲ReadLine(),並且不再有奇怪的換行符。我將繼續使用這種方法,看看它是否適用於我的其他應用程序。

很奇怪......

4

貌似SerialPort.NewLine對我來說,在默認情況下一個換行符( '\ n')。另外檢查你是否真的從端口獲得,並且不僅僅向RTB追加空行。

從屏幕截圖中排除故障代碼並不能很好地工作。使用調試器。

+0

我絕對是每次都從港口接收一些東西(不只是一個空行) - 已經檢查過了。不幸的是,使用調試器非常困難。如果我暫停我的C#應用​​程序以進行調試,則應用程序不起作用,因爲發送串行數據的設備不斷髮送它並且從端口讀取數據。 (所以,一切都是錯誤的。) – JasCav 2011-04-03 22:09:36

+0

@JasCav您可以嘗試使用一些額外的數據(如時間戳和消息長度)將輸出寫入文本文件,這應該會顯示您正在接收的內容。 – ChrisF 2011-04-03 22:12:23

+0

設置握手屬性,以便設備停止發送。添加跟蹤到您的代碼,如Debug.Print()。 – 2011-04-03 22:13:43

0

更妙的是,使用TextBoxMultiLine設置爲true而不是RichTextBoxTextBox忽略數據中的\ r字符,並在每次看到\ n字符時都會給出一個新行。

下面是一些示例代碼:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
    String ser_data = this.serialPort1.ReadExisting(); 
    } 

...後來在回調函數:

richtextbox.AppendText(ser_data); 

把一個斷點剛剛過去的行讀取數據。然後通過另一臺計算機的超級終端發送回車。您會注意到有時收到的數據是\ r \ n。如你所期望的那樣,這給你一個單一的回報。但是,\ r有時會與\ n分開收取。在這種情況下,您會在富文本框中獲得額外的換行符。要麼緩衝數據,以便富文本框一起獲取\ r \ n,從字符串中刪除其中的一個,或者從源計算機中刪除一個(\ r或\ n)。例如,在超級終端中,進入文件 - >屬性 - >設置 - > ASCII設置,並取消選中「發送行以換行符結束」。

我知道原來的海報是用這個討論完成的。但是如果你正在閱讀這篇文章,我希望它能幫助你。