日期:2014-05-17  浏览次数:20806 次

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


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
{
    //你原来的代码……
}