很简单的串口读取程序,如下:              Byte[] mbyte = new Byte[100];
            try
            {
                serialPort1.Read(mbyte, 0, 100);
            }            catch
            {
                return;
            }
将串口中的数据读取放入mbyte数组。运行在Pocket PC2003设备上时,如果串口无数据返回(缓冲区为空时),就会进入catch;但是如果运行在Mobile6.0设备上时程序会死在serialPort1.Read(mbyte, 0, 100)这里,不进入catch,直到串口有返回值,程序读完后才会继续执行。如何解决这样的问题??
为了不使程序死在serialPort1.Read上,就要在serialPort1.Read前先判断是否有数据返回,如果无数据就不执行serialPort1.Read。但是如何在serialPort1.Read前判断串口是否有数据返回?开始想用serialPort1的DataReceived事件判断,但是如果返回值短还可以,要是返回值长,程序还是会停留在serialPort1.Read里,并在DataReceived事件中不停循环,而且返回值越长,循环越长,程序看起来还是像死了一样,请问如何让解决??有人遇到过这样的问题么??

解决方案 »

  1.   

    你可以在DataReceived事件里面去读数据啊,还有就是设置超时时间好像也可以。SerialPort s = new SerialPort();
    s.DataReceived += new SerialDataReceivedEventHandler(s_DataReceived);void s_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
       //Do SomeThing
    }
      

  2.   

    如果你在DataReceived 里面取读,那么之后串口里面有数据的时候才会进入s_DataReceived方法,就不存在没有数据不返回的问题了。