我通过串口接收输入并在RichTextBox中显示数据。这样做没问题,只是当我显示数据时,会有很多额外的(不一致的)间距。见下图:
在这种情况下,它显示每两个刻度,但有时它是三个或有时没有。我无法弄清楚为什么会这样。有人有任何想法吗?
修改:以下是我显示数据的方式(代码方式)。
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string msg = port.ReadExisting();
DisplayWindow.AppendText(msg);
DisplayWindow.ScrollToCaret();
}
答案 0 :(得分:4)
对我来说看起来像SerialPort.NewLine,默认是换行符('\ n')。还要检查你是否真的从端口获得某些东西并且不只是向RTB附加一个空行。
从屏幕截图中排除代码故障效果不佳。使用调试器。
答案 1 :(得分:0)
感谢Hans和ChrisF的回复。当我正在研究这个时,我决定搜索ReadExisting()。通过一些SO帖子,事实证明这可能是我的问题。我把它改成了ReadLine(),我不再得到奇怪的换行符了。我将继续使用此方法,看看它是否适用于我的应用程序的其余部分。
很奇怪......
答案 2 :(得分:0)
更好的是,使用TextBox
MultiLine
设置为true
而不是RichTextBox
。 TextBox
忽略数据中的\ r \ n字符,并在看到\ n字符时给出一个新行。
以下是一些示例代码:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
String ser_data = this.serialPort1.ReadExisting();
}
...稍后在回调函数中:
richtextbox.AppendText(ser_data);
在该行之前放置一个断点来读取数据。然后通过HyperTerminal从另一台计算机发送回车。您会注意到有时收到的数据是\ r \ n。这样您就可以获得单一的回报。但是,有时\ r \ n是与\ n分开接收的。在这种情况下,您将在富文本框中获得额外的换行符。要么缓冲数据,要么富文本框一起获取\ r \ n,从字符串中删除其中一个,或从源计算机中删除一个(\ r或\ n)。例如,在超级终端中,转到文件 - >属性 - >设置 - > ASCII设置,取消选中“使用换行符发送行结束”。
我知道原始海报已完成此讨论。但如果你正在读这篇文章,我希望它可以帮到你。