serialPort.Open()后一切正常,然后:
string tempData = "";
      if (serialPort.BytesToRead > 0)
                {
                    tempData = serialPort.ReadLine();//本句一执行就死机!
                    tempData = "";
                }
请问这是何原因?谢谢!

解决方案 »

  1.   

    难道string 型数据承受不了serialPort.ReadLine()的内容吗?
      

  2.   

    你应该用Read()方法因为ReadLine()方法一直会读到有一个新的行才会返回,可能你串口中的数据就一行,一直没有换行,所以它一直不会返回而在等待换行你换成Read()应该就没问题了
      

  3.   

    串口接收的是一帧一帧的数据,但Read()读出的是多长的字节?
      

  4.   

    Read()是调用者自己定义一个byte数组来接收串口中缓存里的数据,byte多长就读多长如果你不知道数据有多长的话,可以用你以前的方法,用ReadLine(),不过要注意的是,发送到串口的数据如果发送完毕,就加一个换行符,ReadLine()就能正确返回了
      

  5.   

    read()的话你自己要做个判断,无限循环READ(),直到若干毫秒没有新的数据过来,当做一帧,开始处理
      

  6.   

    1.你确定是死机?还是你软件停止在这里了?readline方法要在收到你指定的换行符后才会返回,如果没收到就持续等待。
    (换行符设置方法:serial.NewLine="\r\n")
    2.一读就死机,你试试不要换行,直接ReadExisting或是Read出一个数组试试。
    如果真的读了就死机,试试串口工具sscomm32.exe,如果还是死机,可能硬件问题,驱动问题,或是终端资源设置错误,查询IRQ是否冲突。
      

  7.   

    如果你收到的数据中没有换行符,就会停住,软件能动,但不会继续执行下去了。也不会再次触发DataReceive事件。
      

  8.   

    string ls_Rev = "";
    int bytecount = serialPort1.BytesToRead;
                    byte[] byteBar = new byte[bytecount];
                    serialPort1.Read(byteBar, 0, bytecount);
                    for (int i = 0; i < byteBar.Length; i++)
                    {                   
                            ls_Rev += (char)byteBar[i];
                    }
      

  9.   

    int bytesCanRead = ((System.IO.Ports.SerialPort)sender).BytesToRead;
                if (bytesCanRead > 0)
                {
                    byte[] bzData = new byte[bytesCanRead];
                    ((System.IO.Ports.SerialPort)sender).Read(bzData, 0, bytesCanRead);
                    
                    ReceiveData(Encoding.ASCII.GetString(bzData));
                }