如何缓冲传入的串行端口值。 C#
How to buffer incoming serial Port Values. 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
希望有人能帮助我。
最好的方法是使用'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);
}
好的,我明白了!
我必须首先在文件中缓冲通过串行端口从比例尺传来的值。
真的不知道为什么,但是单个值的格式正确并且可以毫无问题地读出。
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;
我的下一个问题是如何将缓冲区文件保持在适当的大小。
你好,有人能告诉我在串行端口上缓冲传入值的最佳方法是什么吗?因为我有一些值在写入文本框时被破坏的问题。我已经在以下问题中问过这个问题:
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
希望有人能帮助我。
最好的方法是使用'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);
}
好的,我明白了!
我必须首先在文件中缓冲通过串行端口从比例尺传来的值。 真的不知道为什么,但是单个值的格式正确并且可以毫无问题地读出。
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;
我的下一个问题是如何将缓冲区文件保持在适当的大小。