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