4

我编写了一个将数据发送到 COM 端口并接收返回数据的应用程序。

发送效果很好,但接收效果不佳。多行和只读文本框中的换行符不正确。

截屏:

在此处输入图像描述

我的接收代码是:

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();
}

在打开端口之前,我将 New Line 属性设置为 \r\n:

_serialPort.NewLine = "\r\n";

如何解决这个问题?

4

3 回答 3

4

文档中

获取或设置用于解释对 ReadLine 和 WriteLine 方法的调用结束的值。

关键在于它用于解释呼叫的结束,而不是设置它。

NewLine 属性处理 SerialPort 对象如何尝试解释传入数据。它不操纵传入的数据。

换句话说,通过将 NewLine 属性设置为 "\r\n",您是在告诉它查找"\r\n" 并将其用作 NewLine 字符。

进入串口的数据就是这样。您无法更改其他人发送数据的方式。(除非您也编写了该应用程序。)您只能告诉 SerialPort 如何尝试正确读取数据。

您需要做的是弄清楚程序发送给您的内容并将 .NewLine 属性设置为那个。很可能它只是发送“\n”或“\r”,因此如果您将 NewLIne 属性设置为匹配,您的程序将开始正确识别发送给它的换行符。

在SerialPort.ReadLine 属性使用中,有更多信息可能会有所帮助

于 2012-12-21T15:11:44.020 回答
2

解决方案是:

textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n");
于 2012-12-21T20:16:50.873 回答
1

尝试这个:

_serialPort.NewLine = Environment.NewLine;
于 2012-12-21T15:10:56.953 回答