如何缓冲传入的串行端口值。 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;

我的下一个问题是如何将缓冲区文件保持在适当的大小。