我一直以为readtimeout属性是像文档中说的那样,是设置读取超时的,可实际情况并不如此,简单建立以下代码:
serialport1.readtimeout=1000;
serialport1.open();
serialport1.readbyte();
按道理,1秒后,会发生TimeoutException异常,可实际上,程序到这里就阻塞了,如果放在界面线程执行的话,那就假死了,如果这个时候给它喂一个字节,它又活了,这表明程序在那里拼老命等了。
实在不知什么道理,希望哪位给出一个解释:
readtimeout到底有什么用?

解决方案 »

  1.   

    从没留意过那个,因为一般都是打算无限等待的。你试过其它读取方法了没有,比如ReadLine等其它方法,如果都没用,估计就真没啥用了。
      

  2.   


    try

    serialport1.read(....);}
    catch
    {
    }试试。
      

  3.   

    没有,还是会卡死。貌似这个方法里面用的是死循环,但没有考虑timeout
      

  4.   

    一直有用“ReadTimeout”和“WriteTimeout”,工作正常。非要找serialport的不足是有的,但这个应该没问题。
      

  5.   

    ReadTimeOut的意思是从有数据开始,读取的时间超过这个设置的值,则引发异常,比如是某些驱动级原因导致读取时间过长导致的,并不是说ReadByte,ReadTo,ReadLine的超时时间,这些方法本身是一定会同步阻塞等结果的,你可以先判断一下,比如
    if(serial.BytesToRead>0) b = serial.ReadByte();
    或是用
    serial.ReadExisting()
    读取到一个缓存,再处理替代ReadLine或ReadTo。
    替代都是发生在你的信源(对你程序的发送方)可能会正常情况的缺失\r\n或你指定字符的情况。
      

  6.   


    的确是这样,一般来说 readbyte 是放在线程中的,因为接收方不知道发送方何时会传输数据所以一直会读取,知道有数据来。
      

  7.   

    在 SerialPort的DataReceived事件中去读好点