你好,有人能说出在串口上缓冲传入值的最佳方法是什么?因为我遇到的问题是,当写入textBox时,某些值会被破坏。我在下面的问题中已经问过这个问题:Why do I get partly strange values from serial port in C#有人告诉我这是因为我没有缓冲它们。当我将从串口获得的字符串写入文本文件时,我得到了这个:
12.5 g
12.5
g
12.5 g
12.
5 g
12.5 g
12.5 g
12.5 g
1
2.5 g
12.5 g
12.5 g
12.5 g
12.5 g
12.5 g
12.5 g
12.5 g
12.5 g
12.5 g
希望有人可以帮助我。
答案 0 :(得分:1)
接近它的最佳方法是使用'g'标记字符串的结尾:
string leftOver = "";
// Read the data like you have
string str = leftOver + Encoding.UTF8.GetString(data);
int index = str.IndexOf('g');
if (index == -1)
{
leftOver += str;
}
else
{
leftOver = str.Substring(index + 1);
str = str.Substring(0, index + 1);
}
答案 1 :(得分:1)
好的,我现在明白了!
我必须首先在文件中缓冲通过串口传输的值。 不知道为什么,但是单个值的形式是正确的,可以在没有问题的情况下读出。
private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs)
{
if (InvokeRequired) //<-- Makes sure the function is invoked to work properly in the UI-Thread
BeginInvoke(new Closure(() => { SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); })); //<-- Function invokes itself
else
{
int dataLength = _serialPort.BytesToRead;
byte[] data = new byte[dataLength];
int nbrDataRead = _serialPort.Read(data, 0, dataLength);
if (nbrDataRead == 0)
return;
string str = Encoding.UTF8.GetString(data);
//Buffer Values in a text file at first!
File.AppendAllText("buffer1.txt", str);
string strnew = File.ReadLines("buffer1.txt").Last();
textBox5.Text = strnew;
我的下一个问题是如何将缓冲区文件保持在适当的大小。