2011-04-03 56 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设置,并取消选中“发送行以换行符结束”。

我知道原来的海报是用这个讨论完成的。但是如果你正在阅读这篇文章,我希望它能帮助你。