c#中串口的循环缓冲区

时间:2017-08-08 15:05:46

标签: c#

我想在c#中创建循环缓冲区。 我有Arduino板发送大量数据 当串口命令中丢弃缓冲区时,某些数据将丢失。 在这种情况下,我需要使用循环缓冲区来保存我的数据。

InputData = ComPort.ReadByte();
object firstByte = InputData;

if (ComPort.IsOpen==true)
{
    s = Convert.ToString(Convert.ToChar(firstByte));
    temp1 += s;
    lock (firstByte) {    
    if (Convert.ToInt32( firstByte)== 13)
    {
        temp = temp1;
        temp1 = "";                   
        LstGetInfo.BeginInvoke(new Action(()=>
        { 
            if (temp !=null)
            { 
                LstGetInfo.Items.Add(temp);

                if (LstGetInfo.Items.Count >= 100)
                {
                     LstGetInfo.Items.Clear();
                     // ComPort.DiscardInBuffer();
                     //ComPort.DiscardOutBuffer();
                }
                FileStream fs = new FileStream(filename, FileMode.Append);
                var data = System.Text.Encoding.UTF8.GetBytes(String.Format("{0} {1}", temp, DateTime.Now.ToString("hh mm ss")) +"\r\n");
                fs.Write(data, 0, data.Length);
                fs.Close();
            }
        }));
        LstGetInfo.BeginInvoke(new Action(() =>
        {
            LstGetInfo.TopIndex = LstGetInfo.Items.Count - 1;
        }));
    }
}

解决这个问题的任何方法?

1 个答案:

答案 0 :(得分:-2)

请尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication72
{
    class Program
    {

        static string buffer = "";

        static void Main(string[] args)
        {

        }

        static void AddToBuffer(byte[] rxData)
        {
            buffer += Encoding.UTF8.GetString(rxData);
        }
        static string ReadLine()
        {
            int returnIndex = buffer.IndexOf("\n");
            if (returnIndex >= 0)
            {
                string line = buffer.Substring(0, returnIndex);
                buffer = buffer.Remove(0, returnIndex + 1);
                return line;
            }
            else
            {
                return "";
            }
        }
    }
}