private SerialPort  m_SerialPort    = null;        
private string      m_strPortName   = "Com1";
        private StopBits    m_StopBits      = StopBits.Two;
        private Parity      m_Parity        = Parity.Even;
        private int         m_iDataBits     = 8;
        private int         m_iBaudRate     = 57600;
        private int m_iCurrentRecieveByteCount = 0;--打开端口
 public bool OpenCOM()
        {
            bool bResult = true;
            try
            {
                if (m_SerialPort == null)
                {
                    m_SerialPort    = new SerialPort();
                    
                        m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(CpmPort_DataReceivedHandler);
                    }
                    else
                    {
                        m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
                    }                }                if (m_SerialPort.IsOpen)
                {
                    m_SerialPort.Close();
                    m_SendQueue.Clear();
                }                m_SerialPort.PortName   = m_strPortName;
                m_SerialPort.BaudRate   = m_iBaudRate;
                m_SerialPort.DataBits   = m_iDataBits;
                m_SerialPort.StopBits   = m_StopBits;
                m_SerialPort.Parity     = m_Parity;                m_SerialPort.Open();
            }
            catch (Exception ex)
            {
                // Throw open comport failed message
            }
           
            return bResult;
        }--关闭端口
/// <summary>
        /// close com port
        /// </summary>
        /// <returns></returns>
        public bool CloseCOM()
        {
            bool bResult = true;
            try
            {
                if (m_SerialPort.IsOpen)
                {
                    m_SerialPort.Close();
                    m_SerialPort = null;
                }
            }
            catch (Exception)
            {
                bResult = false;
            }
            return bResult;
        }
---发送数据用
  private void SendToCom(byte[] rabyteSentData)
        {
 int iSize = rabyteSentData.Length;
 m_SerialPort.Write(rabyteSentData, 0, iSize);
}--接受com数据
   /// <summary>
        /// Received data event handler
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComPort_DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {          //Setting timeout
            m_SerialPort.ReadTimeout = 100;            // Obtain the number of bytes waiting in the port's buffer
            int bytes = m_SerialPort.BytesToRead;            // Create a byte array buffer to hold the incoming data
            byte[] buffer = new byte[bytes];            // Read the data from the port and store it in our buffer
            m_SerialPort.Read(buffer, 0, bytes);
                  }

解决方案 »

  1.   

    打开端口段中
    m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(CpmPort_DataReceivedHandler);
    }
    else
    {
    m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
    }}这里copy错了如下:
    m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceivedHandler);
      

  2.   

    发送代码中,应该先设置端口/波特率/校验等 再 open.
      

  3.   

                            //serialPort1.Open();                         string   sPortName   =   textBox5.Text; 
                            int   nBaudRates   =   Convert.ToInt32(textBox6.Text); 
                            int   nDataBits   =   Convert.ToInt32(textBox7.Text); 
                            Parity   pParity   =   (Parity)Enum.Parse(typeof(Parity),   comboBox3.SelectedItem.ToString()); 
                            StopBits   sStopBits   =   (StopBits)Enum.Parse(typeof(StopBits),   comboBox4.SelectedItem.ToString());                         string   sTxt   =   textBox8.Text;                         serialPort1.PortName   =   sPortName; 
                            serialPort1.BaudRate   =   nBaudRates; 
                            serialPort1.DataBits   =   nDataBits; 
                            serialPort1.Parity   =   pParity; 
                            serialPort1.StopBits   =   sStopBits;                         serialPort1.Open();                         serialPort1.WriteLine(sTxt); 
                            serialPort1.Close(); 
      

  4.   

    我是在VS2005上用C#写的,代码如下:
     try
                    {
                        serialPort1.Parity = System.IO.Ports.Parity.None;
                        serialPort1.StopBits = System.IO.Ports.StopBits.One;
                        serialPort1.BaudRate = 9600;
                        serialPort1 .DataBits =8;
                        serialPort1.PortName = "COM2";
                        serialPort1.ReadBufferSize = 1024;
                        serialPort1.WriteBufferSize = 1024;
                        serialPort1.WriteTimeout = 200;
                        serialPort1.Open();
                        serialPort1.ReadExisting();//设置Input从接收缓冲读取全部数据
                        serialPort1.ReceivedBytesThreshold = 1;//设置引发OnComm事件的字节长度
                        serialPort1.DiscardInBuffer();//清除接收缓冲区
                        serialPort1.DiscardOutBuffer(); //清除发送缓冲区
                    }
                    catch (System .Exception ex)
                    {
                        labState.Text = "请重新配置串口!请检查"+ex.Message;
                    }
    但在打开的串口的时候报错?在模拟器PPC2003,WM5/6都可以打开并正常收发?
      

  5.   

    发送前先设置参数,再open.
    接收:控件的话在接收事件中处理
    若是类对象的话,用timer或线程读该对象的接收缓冲区