1,最主要的是想问大家有好的处理接收数据的逻辑么?
因为短信,每次数据都不固定.我现在是弄个缓冲区,在ataReceived 用SerialPort1.Read(mRecvData, 0, mSize)每次接收到的数据都放进去,然后去找cmt开头的.然后清掉无用的. 我感觉这里效率不高.因为测试发现,我发送的数据,就是write的内容,也都同样再被read一遍.
想问作过类似的朋友,你们怎么处理的.2 我一直都执行AT+CMGF=0;+CNMI=2,2,0,0,0;+CSMP=17,167,0,25,短信到达,直接处理.不要写卡.不知道大家是不是也都这样操作.
但昨天别人用一个usb猫,运行我的程序,报错. 具体原因还待我细查.
因为短信,每次数据都不固定.我现在是弄个缓冲区,在ataReceived 用SerialPort1.Read(mRecvData, 0, mSize)每次接收到的数据都放进去,然后去找cmt开头的.然后清掉无用的. 我感觉这里效率不高.因为测试发现,我发送的数据,就是write的内容,也都同样再被read一遍.
想问作过类似的朋友,你们怎么处理的.2 我一直都执行AT+CMGF=0;+CNMI=2,2,0,0,0;+CSMP=17,167,0,25,短信到达,直接处理.不要写卡.不知道大家是不是也都这样操作.
但昨天别人用一个usb猫,运行我的程序,报错. 具体原因还待我细查.
1、DataReceived的事件处理函数是由主线程以外的线程调用的
2、DataReceived事件处理函数中调用Form对象的BeginInvoke函数,将接收到的数据转移到主线程
3、被Invoke的函数在保存接收到的数据后重新启动100ms的定时器(timer.Enabled=false; timer.Enable=ture;)
4、在timer的Tick事件处理函数中将已经接收到的数据作为一个完整的数据包来处理