初学C#,为什么第一个时间错误。  第二个事件就可以啊?
        private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            byte[] rsvdata = Convert.FromBase64String(serialPort.ReadLine());//读取输入缓冲区
            string str = Encoding.Unicode.GetString(rsvdata);                //解码
            serialPort.Close();//关闭串口            rsvbox.Text = str;//错误!
        }        private void button1_Click(object sender, EventArgs e)
        {
            byte[] rsvdata = Convert.FromBase64String(serialPort.ReadLine());//读取输入缓冲区
            rsvbox.Text =  Encoding.Unicode.GetString(rsvdata);              //解码
            serialPort.Close();                                              //关闭串口*/
        }

解决方案 »

  1.   


            void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                int count = upsCom.BytesToRead;            byte[] buffer = new byte[count];            serialPort.Read(buffer, 0, count);            string resultString = Encoding.Default.GetString(buffer);//这里要根据实际情况选择解码            if (serialPort.IsOpen)
                {
                    serialPort.DiscardInBuffer();
                }
            }
      

  2.   

    更正下:
            void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                int count = serialPort.BytesToRead;            byte[] buffer = new byte[count];            serialPort.Read(buffer, 0, count);            string resultString = Encoding.Default.GetString(buffer);//这里要根据实际情况选择解码            if (serialPort.IsOpen)
                {
                    serialPort.DiscardInBuffer();
                }
            }
      

  3.   

    rsvbox.Text = str;//错误!
    这里跨线程调用了。提示应该是不是在创建rsvbox的线程上访问它。如果是的话请改用安全的异步调用方法,比如Invoke或用BackgroundWorker异步编程。