private void ComReceive(object sender, SerialDataReceivedEventArgs e)
 {
     bReceiveCompleted = false;
     if (bRecStaus) //如果已经开启接收
     {
         try
         {
             Thread.Sleep(50);
             ReceivedDataPacket     = new byte[CurrentSerialPort.BytesToRead];
             ReceivedDataPacketChar = new char[CurrentSerialPort.BytesToRead];
             // change to char datas
             if (ByteMode)
             {
                 CurrentSerialPort.Read(ReceivedDataPacket, 0, ReceivedDataPacket.Length);
                 receiveArrByteQueue.Enqueue(ReceivedDataPacket);
                 receiveArrCharQueue.Clear();//清空Char接收缓存
                 //OnSerialPortMiss(new SerialPortMissingEventArgs("test event byte"));
             }
             else
             {
                 CurrentSerialPort.Read(ReceivedDataPacketChar, 0, ReceivedDataPacketChar.Length);
                 receiveArrCharQueue.Enqueue(ReceivedDataPacketChar);
                 receiveArrByteQueue.Clear();//清空Byte接收缓存
                 // OnSerialPortMiss(new SerialPortMissingEventArgs("test event char"));
             }
             bReceiveCompleted = true;
         }
         catch (Exception)
         {
             if (CurrentSerialPort.IsOpen == false) //如果ComPort.IsOpen == false,说明串口已丢失
             {
                 SetComLose();                      //串口丢失后相关设置
             }
             else
             {
                 // throw new Exception("unable to receive data");
                 OnSerialPortMiss(new SerialPortMissingEventArgs("unable close serial port"));
             }
         }
     }
     else //暂停接收
     {
         CurrentSerialPort.DiscardInBuffer(); //清接收缓存
     }
 }
예제 #2
0
        private void ComReceive(object sender, SerialDataReceivedEventArgs e)
        {
            ReceiveCompleted = false;
            if (_recStaus) //如果已经开启接收
            {
                try
                {
                    Thread.Sleep(50);
                    ReceivedDataPacket     = new byte[CurrentSerialPort.BytesToRead];
                    ReceivedDataPacketChar = new char[CurrentSerialPort.BytesToRead];
                    // change to char datas
                    if (ByteMode)
                    {
                        CurrentSerialPort.Read(ReceivedDataPacket, 0, ReceivedDataPacket.Length);

                        /*
                         * string s = "";
                         * for (int a = 0; a < ReceivedDataPacket.Length; a++)
                         *  s += ReceivedDataPacket[a] + " ";
                         * new LOG.LogClass().WriteLogFile(LOG.LogSerial.logSerialnum + "---serialGetData-->" + s);
                         */
                    }
                    else
                    {
                        CurrentSerialPort.Read(ReceivedDataPacketChar, 0, CurrentSerialPort.BytesToRead);
                    }
                    ReceiveCompleted = true;
                }
                catch (Exception)
                {
                    if (CurrentSerialPort.IsOpen == false) //如果ComPort.IsOpen == false,说明串口已丢失
                    {
                        SetComLose();                      //串口丢失后相关设置
                    }
                    else
                    {
                        throw new Exception("unable to receive data");
                    }
                }
            }
            else //暂停接收
            {
                CurrentSerialPort.DiscardInBuffer(); //清接收缓存
            }
        }