将上面的语句放在 serialPort1_DataReceived事件当中,

解决方案 »

  1.   

     private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                byte r_byte;
                while (serialPort1.BytesToRead != 0)
                {
                    r_byte = Convert.ToByte(serialPort1.ReadByte());
                    switch (r_flag)
                    {
                        case 0:
                            if (r_byte == 0xaa)
                            {
                                r_flag += 1;
                                serial_input[0] = r_byte;
                            }
                            break;
                        case 1:
                            if (r_byte == 0xaa)
                            {
                                r_flag += 1;
                                serial_input[1] = r_byte;
                                r_count = 0;
                            }
                            else
                            {
                                r_flag = 0;
                                r_count = 0;
                            }
                            break;
                        case 2:
                            serial_input[r_count + 2] = r_byte;
                            r_count += 1;
                            if (serial_input[2] != 0xd0)
                            {
                                if (r_count == 4)
                                {
                                    r_flag = 0;
                                    r_count = 0;
                                    rs_cl();//调用接收处理函数
                                }
                            }
                            else
                            {
                                if (r_count == 0x14)
                                {
                                    r_flag = 0;
                                    r_count = 0;
                                    rs_cl();//调用接收处理函数
                                }                        }
                            break;
                    }
                }
            }
      

  2.   

    这个方法我用了,代码如下:
    在serialPort_DataReceived事件中:
    try
    {
                    if (czSerialPort.BytesToRead == 0)
                    {
                        strczData = "Error";
                    }
                    else
                    {
                        //定义接收数据长度
                        int bytesRead = czSerialPort.BytesToRead;
                        byte firstbyte = Convert.ToByte(czSerialPort.ReadByte());
                        //判断第一个字节是否是起始位:16进制的0x02
                        if (firstbyte == 0x02)
                        {
                            byte[] bytesData = new byte[bytesRead];
                            for (int i = 0; i <= bytesRead - 2; i++)
                            {
                                byte byteData = Convert.ToByte(czSerialPort.ReadByte());
                                //判断数据结束字节
                                if (byteData == 0x03)
                                    continue;
                                bytesData[i] = byteData;
                            }
                            //将字节数组转换成字符串
                            strczData = System.Text.Encoding.Default.GetString(bytesData);
                            //截取数据(舍去校验和等字符)
                            strczData = strczData.Remove(7);
                            //通过捕获异常来转换接收到的字符串
                            try
                            {
                                int intczData = Convert.ToInt32(strczData);
                                strczData = Convert.ToString(intczData);
                            }
                            catch
                            {
                                strczData = "Error";
                            }
                        }
    }
    catch (exection czerror)
    {
        MessageBox.Show(czerror.Message);
    }在代码中加入了你说的判断仍旧不行。
      

  3.   

    你可以可以用API写,这样就有延时参数可以用了
      

  4.   

    SERIALPORT_DATARECEIVED 怎么触发啊,我的每次都不执行啊?