ReadExisting () в последовательном порту выдает исключение ввода-вывода - PullRequest
1 голос
/ 08 ноября 2011

Мы читаем данные из 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...