Данные последовательного порта получали обработчик событий более одного раза - PullRequest
0 голосов
/ 24 сентября 2018

Я создал программу, которая читает сообщения от беспроводного сотового модема (ZTE MF 190), а затем выполняет дополнительные функции для полученного сообщения.Проблема, с которой я сталкиваюсь, заключается в том, что обработчик событий, полученный данным, запускается несколько раз для каждого полученного сообщения, в то время как требование состоит в том, чтобы запускать его только один раз.

Здесь показан код:

_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);

Приведенный выше код предназначен для активации прослушивателя.

private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    read_sms();        
}

Приведенный выше обработчик событий выполняет необходимые операции, но онбыть уволенным более одного раза.Как ограничить его выполнение только один раз.

1 Ответ

0 голосов
/ 24 сентября 2018

Событие получения данных из последовательного порта сообщает вам, что некоторые символы были получены.Это не говорит вам, что было получено целое смс.Следовательно,

  1. Нет смысла вызывать метод с именем read_sms () в результате запуска этого события, потому что у вас нет абсолютно никаких гарантий того, что смс доступен полностью.читать.

  2. На самом деле вы должны ожидать, что событие будет запускаться много раз, так как поступает больше символов, пока не будет получено все смс.

Вам необходимо сохранить полученные символы в буфере и проанализировать буфер, чтобы определить, содержит ли он смс полностью.

...