SerialPort получает данные в своем собственном потоке? - PullRequest
3 голосов
/ 27 апреля 2011

Допустим, у нас есть следующий код:

SerialPort port = new SerialPort("COM2", 115200); 
port.Open();
//
Thread.Sleep(5000);
//
if (port.BytesToRead > 0)
{
   Console.WriteLine("Bytes in buffer: " + port.BytesToRead.ToString());
}

Если в течение этих 5000 миллисекунд, в которых поток заблокирован, 5 последовательных байтов было отправлено на последовательный порт, будет ли код печатать, что есть 5 байтовв буфере?Или он не начнет получать, пока не вернется Thread.Sleep?

Спасибо

1 Ответ

8 голосов
/ 27 апреля 2011

Связь на аппаратных устройствах, таких как жесткие диски, сетевые порты и, да, последовательные порты, осуществляется с использованием потока завершения ввода-вывода, управляемого ThreadPool. Итак, краткий ответ на ваш вопрос заключается в том, что данные должны приниматься портом, даже если ваша программа не запущена и активно ее ожидает. Когда ваш поток проснется, он спросит у порта, сколько байтов находится в буфере, и ответит, что у него еще 5 байтов, чем до того, как вы спали в потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...