Мы читаем данные из SerialPort в .Net 2.0. Но перед чтением мы убедимся, что в последовательном порту ничего нет. Итак, мы ждем, пока в буфере последовательного порта не будет пусто.
Вот код:
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 выдает это исключение ввода-вывода:
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()