大家来找茬(关于串口的)
以下是我的程序代码,麻烦大家给我找找茬。好像有时候会出现数据接收不全的情况。我的是发完数据---接收数据----处理数据--再发送数据。(多线程情况就先别说了,只想叫大家帮忙找找我这样写有什么错,想不通)多谢
SerialPort1_DataReceived中代码如下:
if (serialPort1.BytesToRead > 0)//开始触发事件是一字节触发
{
serialPort1.ReceivedBytesThreshold = 100;//触发后改为100字节触发,实际返回的数据为39个
Thread.Sleep(100);//等待100ms
while (buffer.Count != Num)//Num是39
{
byte[] buf = new byte[serialPort1.BytesToRead];
serialPort1.Read(buf, 0, serialPort1.BytesToRead);
buffer.AddRange(buf);
}
if (buffer.Count == Num)//缓冲取中数据=Num时
{
buffer.CopyTo(0, sign_byte, 0, Num);//把num个数据赋给sign_byte
buffer.RemoveRange(0, Num);//移除数据
shuju_jieshou = 1;//处理数据的标志---见处理数据部分(在时钟中)
serialPort1.ReceivedBytesThreshold = 1;)//设置触发事件是一字节触发
}
}
时钟处理数据代码:
if (shuju_jieshou == 1)
{
shuju_jieshou = 0;
deal(sign_byte);//处理数据
fasong();//发送命令,等待返回
}
------解决方案--------------------
用委托试试,SerialPort1_DataReceived中代码改成:
C# code
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate { SerialPort1_DataReceived(sender, e); }));
}
else
{
//你原来的代码……
}