Clear serial port receive buffer in C#

后端 未结 4 1350
北海茫月
北海茫月 2020-12-15 08:57

Just want to know how do we clear the receive buffer of my serial port in C#. Seems like the data in the receive buffer just keep accumulating. For example, the flow of inc

相关标签:
4条回答
  • 2020-12-15 09:07

    If you are using the System.IO.Ports.SerialPort then you could use the two methods:

    DiscardInBuffer() and DiscardOutBuffer() to flush the buffers.

    If you are reading the data from a serial port:

    private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        if (!this.Open) return; // We can't receive data if the port has already been closed.  This prevents IO Errors from being half way through receiving data when the port is closed.
        string line = String.empty;
        try
        {
            line = _SerialPort.ReadLine();
            line = line.Trim();
           //process your data if it is "DATA C", otherwise ignore
        }
        catch (IOException ex)
        {
            //process any errors
        }
    }
    
    0 讨论(0)
  • 2020-12-15 09:16

    you can use like

    port.DiscardOutBuffer();
    port.DiscardInBuffer();
    port.Close();
    port.DataReceived -= new SerialDataReceivedEventHandler(onDataReceived);
    port = null;
    
    0 讨论(0)
  • 2020-12-15 09:18

    Use port.DiscardOutBuffer(); and port.DiscardInBuffer(); to clear the serial port buffers

    0 讨论(0)
  • 2020-12-15 09:28

    There are two buffers. One buffer is associated with the serial port and the other with its base stream, where data from the port buffer is streamed into. DiscardIn Buffer() just gets data from the Serial Port buffer discarded. There is still data in the Base Stream that you will read. So, besides using DiscardInBuffer, also use SP.BaseStream.Flush(). Now you have a clean slate! If you are not getting a lot of data, simply get rid of the base stream: SP.BaseStream.Dispose().

    Since you are still getting the data received event, yo can read it and not put yourself in jeopardy of losing data.

    0 讨论(0)
提交回复
热议问题