想做的事情是:每发一次“AT”指令到串口,等到串口返回的信息“OK”或是“ERROR”后,再执行下一条的AT指令
我想有两种方式:
1、用的是SerialPort里的DataReceived事件,但现在发一个命令,事件有时会被触发几次,可能在最后一次读取的字符串才是包含“OK”或是“ERROR”的字符串。DataReceived是用的辅助线程,那么在event被触发的同时,主程序会不会已经运行到发送下一条命令了,主程序里都还没有收到上条命令的回复。
   
2、在命令后面加Thread.Sleep(100),
就像这样:sendCommand("AT\r");
Thread.Sleep(100);
sendCommand("AT+CMGF=0\r");
Thread.Sleep(100);
...
最后,事件触发时,读出sp.ReadExisting();的缓冲区里的字节,看到好象有些命令根本没有被执行。
希望大家给点建议,怎么解决这个问题?

解决方案 »

  1.   

    现在发一个命令,事件有时会被触发几次
    ----反馈信息是多条么?还是因为未定义触发DataReceived事件的接收字节数 ,如果反馈只有一条,可以使用阻塞机制,设置好ReadTimeout,直接read
    再验证返回的信息是否含有“OK”或是“ERROR”
      

  2.   

     发这个"AT+CMGS=**"后,输入短信PDU编码后就会,事件会被触发两次,第一次是短信内容,第二次是类似于+CMSS: 56  OK 的消息。第二次隔过几秒才会被触发