最近采用C#串口编程遇到一个问题:一个测试数据怎么拆分成2个字符串,做了2次发送,屏幕显示的字符总是少了几位,
输出的数据是这样的:
2013-06-26 09:38:29 XR1000229E-2,GO
2013-06-26 09:39:20 XR1000244E-
2013-06-26 09:39:20 2,GO
2013-06-26 09:39:27 XR1000244E-2,GO
2013-06-26 09:39:29 XR1000250E-2,GO
2013-06-26 09:39:34 XR1000242E-2,GO
2013-06-26 09:39:34
2013-06-26 09:39:36 XR1000240E-2,GO
2013-06-26 09:39:38 XR1000242E-2,GO
2013-06-26 09:39:39 XR100024
2013-06-26 09:39:39 7E-2,GO
2013-06-26 09:39:41 XR100
2013-06-26 09:39:41 0252E-2,GO
原来的代码设计:
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Invoke(new MethodInvoker(delegate()
{
int N = this.sp.BytesToRead;
byte[] RecieveBuf = new byte[N];
this.sp.Read(RecieveBuf, 0, N);
string strRecieve3 = System.Text.Encoding.Default.GetString(RecieveBuf);
this.txtValue.Text = strShow;
}));
}
分析:发送E后,等待内存缓冲是否够“XR0001095E+1,LO”字符,如果接收的长度正确,才输出结果,否则等待继续接收,也就是第二次的接收。
改善后的代码:
}