我们正在从.Net 2.0中的SerialPort读取数据 . 但在阅读之前,我们确保串口中没有任何内容 . 所以我们要等到串口Port In-Buffer为空 .

这是代码:

SerialCommunicationPort.SerialPort.BaudRate = 300;
SerialCommunicationPort.SerialPort.Parity = Parity.None;
SerialCommunicationPort.SerialPort.StopBits = 1;
SerialCommunicationPort.SerialPort.DataBits = 7;
SerialCommunicationPort.SerialPort.ReadTimeout = 1;
SerialCommunicationPort.SerialPort.RtsEnable = true;
SerialCommunicationPort.SerialPort.DtrEnable = true;
SerialCommunicationPort.SerialPort.WriteTimeout = 1500; 

do
{
    strTempRecv = SerialCommunicationPort.SerialPort.ReadExisting();
    if (string.IsNullOrEmpty(strTempRecv))
    {
        Thread.Sleep(100);
        intTimeOut++;
    }
    else
    {
        intTimeOut = 0;
    }
} while (intTimeOut < 50);

如果外部设备以某种波特率(例如4800)将数据发送到串行端口,我们的应用程序将在300接收该数据 . 经过一段时间后,上面的Do-While循环抛出此IO异常:

System.IO.IOException: The I/O operation has been aborted because of either a thread exit or an application request.

   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream.BeginReadCore(Byte[] array, Int32 offset, Int32 numBytes, AsyncCallback userCallback, Object stateObject)
   at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count, Int32 timeout)
   at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.Ports.SerialPort.ReadExisting()