串行端口数据接收事件处理程序触发多次



我创建了一个程序,该程序从无线蜂窝调制解调器(ZTE MF 190(读取消息,然后对收到的消息执行进一步的功能。我面临的问题是,datareceived 事件处理程序为收到的每条消息触发多次,而要求只触发一次。

代码如下所示:

_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);

上面的代码是激活侦听器。

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

上述事件处理程序执行必要的操作,但它被多次触发。如何限制它只执行一次。

串行端口数据接收事件告诉您已收到某些字符。 它不会告诉您已收到整条短信。 因此

由于
  1. 此事件触发而调用名为"read_sms(("的方法没有意义,因为您绝对无法保证整个 SMS 可供读取。

  2. 事实上,您应该期望事件会触发很多次,因为更多的字符到达,直到收到整个短信。

您需要将接收到的字符存储在缓冲区中,并且需要解析缓冲区以确定它是否包含完整的短信。

最新更新