Я использую класс .NET SerialPort для связи с датчиками.Каждый раз, когда нажимается кнопка на датчике, через порт отправляется считываемое значение.
Проблема, с которой я столкнулся, заключается в том, что если кнопка датчика нажата при выключенной программе, то при запуске программы она запускает полученные данные.событие для этих существующих данных.Я не хочу этого поведения - я только хочу собирать показания, сделанные после открытия порта.
У меня есть текущий обходной путь, использующий Thread.Sleep, но он кажется хакерским, и мне интересно, знает ли кто-нибудьлучшего решения.
port = New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
port.Open()
port.DtrEnable = True
System.Threading.Thread.Sleep(100)
port.ReadExisting()
AddHandler port.DataReceived, AddressOf PortDataReceived
Если у меня нет Thread.Sleep, то событие DataReceived вызывается для данных предыдущего датчика.Я предполагаю, что это потому, что ReadExisting не блокируется и поэтому, когда он вызывается сразу после открытия, он просто ничего не читает.
Спасибо
Так что если вы вызываете 'port.BytesToRead () 'сразу после открытия его ноль.Если вы называете это через 100 мс после открытия, он ненулевой.Я предполагаю, что это имеет смысл - для чтения существующих данных требуется время после открытия.
Другой вариант - вызвать чтение и установить тайм-аут чтения, но это не отличается от Thread.Sleep, за исключением того, что вам нужно пойматьисключение ...