//串口接收数据
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            Thread.Sleep(150);
            byte [] nt=new byte[104];
            try
            {
                serialPort1.Read(nt, 0, 104);
            }
            catch(TimeoutException x)
            {
                MessageBox.Show(x.Message);
            }
            ShowInfo(nt);
        }为什么接收完数据后 空包他还会触发DataReceived事件呢,怎么解决
求高手指点,有代码更好

解决方案 »

  1.   

    在serialPort1.Read(nt,   0,   104); 之后
    加上一句试试:
    serialPort1.DiscardInBuffer(); 
      

  2.   

    应该不会吧。
    你判断一句
    if(serialPort1.BytesToRead == 0) return;
      

  3.   

    “空包”指的是什么?是指只有包头和包尾没有数据体的包么?
    如果是,那么空包也是“包”,当然要接收了。只有缓存区上没有包,才不触发DataReceive事件
      

  4.   

    那边不往串口里发,应该不会触发这个事件。另外你可以设置serialPort.ReceivedBytesThreshold = 104;这样可以减小出发的次数,还有要判断接收的数据,如果不符合你要的,可以过滤掉。
      

  5.   

    5楼说的对 是那样的全是0 好像是系统触发的
    我现在加了句代码
                if (serialPort1.BytesToRead <= 0)
                    return;
    不会出现超时异常但不知道有没有别的更好的办法