private void btnReceive_Click(object sender, EventArgs e)
        {
          if(IsOpen )
          {
              try
              {
                  
                  txtReceive.Text += sp.ReadLine();
               }
              catch(Exception)
              {
                  lblStatus.Text = "读取串口时发僧错误!";
               return;
              }           }
          else 
          {
              MessageBox.Show("串口未打开!","错误提示");
              return;
           }
        }
IsOpen是串口打开标志位,调试程序时用单步跟踪,串口检测,发数据都很正常,点击“接收”按钮后出现异常,要么显示串口未打开,要么接受框中为空,现在调试时执行完txtReceive.Text += sp.ReadLine();后就弹出Form,但是上面的字体看不清楚,不知道是怎么回事?有没有高手解答一下,串口程序已经困扰我好久了,我是新手,望高手多多提携!
C#

解决方案 »

  1.   

     sp.ReadLine();
    这个方法没用过,我知道的是,串口里有个委托,当串口接收到数据里,就会触发这个委托,我都是一个从这个委托中取数据的,没发现过问题
      

  2.   

    建议你不要用ReadLine()这个方法,因为他读取的时候是按照2进制还是16进制读取的,所以说这个方法读取的时候是直接从串口读取单片机发送的数据,而不是你Label或者textbox想要的数据类型。
    你可以这样试一试
    byes[] s = new byes[16];
    sp.read(s,0,s.length);
    最后把s转换成String型就可以了!
    我以前也遇到过这样的问题。
      

  3.   

    串口未打开的问题,这个完全可以自己避免的,只要先打开串口再按这个按钮就可以了。再者,串口未打开的话,也收不到来自下位机的数据。sp.ReadLine();ReadLine方法是读到一行的末尾,如果下位机没有发送换行符,那你就会读不到数据。
    如果下位机发送的数据是已经进行编码的,可以 用txtReceive.Text += sp.ReadExisting();
    还有就是可以通过读取字节的方式读取下位机的方式
    int len=sp.BytesToRead;
    byte[]buffer=new byte[len];
    sp.Read(buffer,0,len);
    txtReceive.Text+=BitConverter.ToString(buffer);