我编写了一个将数据发送到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";
如何解决这个问题?
答案 0 :(得分:4)
获取或设置用于解释对调用结束的值 ReadLine和WriteLine方法。
关键在于它使用 来解释 结束通话,而不是 设置
NewLine属性处理SerialPort对象如何尝试解释传入数据。它不会操纵传入的数据。
换句话说,通过将NewLine属性设置为“\ r \ n”,您将告诉 查找 “\ r \ n”并使用该属性作为NewLine角色。
进入串口的数据就是这样。您无法更改其他人发送数据的方式。 (除非您也编写了该应用程序。)您只能告诉SerialPort如何正确地尝试读取数据。
您需要做的是弄清楚程序发送给您的是什么,并将.NewLine属性设置为 。很可能它只是发送“\ n”或只是“\ n”,所以如果你设置NewLIne属性匹配,你的程序将开始正确识别发送给它的换行符。
上可以提供更多信息答案 1 :(得分:2)
解决方案是:
textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n");
答案 2 :(得分:1)
试试这个:
_serialPort.NewLine = Environment.NewLine;