我创建了一个程序,该程序从无线蜂窝调制解调器(ZTE MF 190(读取消息,然后对收到的消息执行进一步的功能。我面临的问题是,datareceived 事件处理程序为收到的每条消息触发多次,而要求只触发一次。
代码如下所示:
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
上面的代码是激活侦听器。
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
read_sms();
}
上述事件处理程序执行必要的操作,但它被多次触发。如何限制它只执行一次。
串行端口数据接收事件告诉您已收到某些字符。 它不会告诉您已收到整条短信。 因此
由于此事件触发而调用名为"read_sms(("的方法没有意义,因为您绝对无法保证整个 SMS 可供读取。
事实上,您应该期望事件会触发很多次,因为更多的字符到达,直到收到整个短信。
您需要将接收到的字符存储在缓冲区中,并且需要解析缓冲区以确定它是否包含完整的短信。