Используя SerialDataReceivedEventHandler можно ли узнать, когда происходит тайм-аут? - PullRequest
1 голос
/ 03 апреля 2012

Я использую SerialDataReceivedEventHandler, чтобы узнать, когда мой объект SerialPort получает данные.

Можно ли узнать, когда я больше не буду получать данные, потому что произошел межбайтовый таймаут?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Короткий ответ: вы могли бы , но вы не должны .

Нет встроенныхв способе сделать это.Однако вы можете установить таймер (как упоминал Ганс) в вашем SerialDataReceivedEventHandler и сбрасывать этот таймер каждый раз, когда вы получаете символы.Если таймер истекает, вы можете выяснить, что вы, возможно, больше не получаете данные.

Как говорится, последовательная связь имеет свои особенности.Тот факт, что таймер истекает, не означает, что другая система закончила с передачей данных.Между ними может быть какой-то механизм управления потоком, который заставит одну систему ждать другую, может быть некоторая задержка на одном конце или другом.(если ваша система занята, она может буферизовать последовательные данные перед запуском события)

Обычно конец передачи определяется при получении какого-то определенного символа (обычно CR / LF), который намного надежнее, чем ожиданиев течение указанного времени ожидания

1 голос
/ 03 апреля 2012

Нет, TimeoutException вызывается только когда вы вызываете Read () и нет данных для чтения. Событие DataReceived вызывается при наличии доступных данных, поэтому вызов Read () никогда не может вызвать это исключение.

Простой обходной путь - использовать свой собственный таймер. Вызовите методы Stop () и Start () в вашем обработчике событий для сброса таймера. И объявлять сбой при срабатывании события Tick.

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