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
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
}
}
you can use like
port.DiscardOutBuffer();
port.DiscardInBuffer();
port.Close();
port.DataReceived -= new SerialDataReceivedEventHandler(onDataReceived);
port = null;
Use port.DiscardOutBuffer(); and port.DiscardInBuffer();
to clear the serial port buffers
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.