If I use GC.SuppressFinalize(serialPort.BaseStream), it still doesn't work in my case. Although the serial port object is not disposed by GC, the serial port can't receive data yet.
I find another way, and it works always!
I write a endless loop to check and create a new serial port object if it is disposed by GC.
while (true)
{
Thread.Sleep(60000);
if (serialPort == null)
{
serialPort = new SerialPort(portName, 9600,Parity.None,8);
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.Open();
}
}
Wish it's usefull for you guys!