System.IO.Ports.SerialPort Время записи () - PullRequest
0 голосов
/ 13 августа 2010

Программа, над которой я работаю в C # (.Net Framework 2.0), требует возможности переключаться в «удаленный режим» и отправлять данные ascii на другой экран через Bluetooth. Начну с того, что я не очень опытный программист, и я ничего не знаю о работе в сети, но вчера я вчера пообщался с классом SerialPort и смог создать небольшую программу для чата, которая прекрасно работала между двумя устройствами, подключенными по Bluetooth ,

Программа чата, однако, отправляла данные только тогда, когда пользователь нажимал кнопку, чтобы «отправить» данные. Если два устройства не были правильно подключены, я просто выкинул TimeoutException вместе с сообщением об ошибке. Программа, над которой я сейчас работаю, намного больше и старается постоянно записывать данные, если у нее открыт COM-порт.

Это означает, что, если два устройства не подключены сразу, оно должно выбросить TimeoutException, и оно будет продолжать выбрасывать его снова и снова, пока они НЕ БУДУТ правильно подключены. Это совершенно неприемлемо. Он замедляет работу программы до такой степени, что она становится непригодной для использования, и выводит отладочные сообщения с сообщениями об ошибках «TimeoutException Thrown Here».

Есть ли лучшее решение, как это сделать? Каким-то образом я могу заставить его записывать данные только в том случае, если я могу подтвердить, что два устройства подключены, без постоянной проверки (и последующего получения ошибок тайм-аута при проверке).

1 Ответ

1 голос
/ 13 августа 2010

Нет. Последовательное соединение без состояния .

Это означает, что вы не знаете, находится ли кто-то на другой стороне. Все, что вы можете сделать, это отправить что-нибудь и посмотреть, не вернется ли что-то значимое.

Самый простой пример для этого - старый добрый аналоговый модем. Чтобы выяснить, подключен ли он, нужно отправить AT и проверить, возвращается ли OK.

Таким образом, ваше решение является правильным, но, возможно, не реализовано должным образом. Вы должны поместить последовательность создания соединения в BackgroundWorker. Таким образом, эти попытки будут выполняться в другом потоке, пока ваш графический интерфейс будет реагировать на действия пользователя.

...