大家来找茬(关于串口的)
以下是我的程序代码,麻烦大家给我找找茬。好像有时候会出现数据接收不全的情况。我的是发完数据---接收数据----处理数据--再发送数据。(多线程情况就先别说了,只想叫大家帮忙找找我这样写有什么错,想不通)多谢
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
{
    //你原来的代码……
}