我一直以为readtimeout属性是像文档中说的那样,是设置读取超时的,可实际情况并不如此,简单建立以下代码:
serialport1.readtimeout=1000;
serialport1.open();
serialport1.readbyte();
按道理,1秒后,会发生TimeoutException异常,可实际上,程序到这里就阻塞了,如果放在界面线程执行的话,那就假死了,如果这个时候给它喂一个字节,它又活了,这表明程序在那里拼老命等了。
实在不知什么道理,希望哪位给出一个解释:
readtimeout到底有什么用?
serialport1.readtimeout=1000;
serialport1.open();
serialport1.readbyte();
按道理,1秒后,会发生TimeoutException异常,可实际上,程序到这里就阻塞了,如果放在界面线程执行的话,那就假死了,如果这个时候给它喂一个字节,它又活了,这表明程序在那里拼老命等了。
实在不知什么道理,希望哪位给出一个解释:
readtimeout到底有什么用?
解决方案 »
- GRIDVIEW实现所有行在编辑状态,然后一次性全部保存!
- 帮忙看段程序,我实在找不出原因
- C# 插入oracle是汉字是乱码!
- VS2008创建Label控件组的问题
- 看看IBM网站写的什么。.net和soa有可比行吗。
- 如何求1970年到现在的时间差(毫秒级)
- 怪事!按钮事件激发不了?但在.net环境下重新点击按钮组件而后重新生成解决方案又行了。大侠们,原因何在呀?
- WPF通过MultiBinding的Converter生新成的Binding源,可实现动态更新吗?
- 类似首选项的界面是如何实现得
- 我们想开发一个C#+Ms SQL Server的进销存软件,大家有兴趣,来报名!
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 800
- 关于sqlserver数据库并发问题
try
{
serialport1.read(....);}
catch
{
}试试。
if(serial.BytesToRead>0) b = serial.ReadByte();
或是用
serial.ReadExisting()
读取到一个缓存,再处理替代ReadLine或ReadTo。
替代都是发生在你的信源(对你程序的发送方)可能会正常情况的缺失\r\n或你指定字符的情况。
的确是这样,一般来说 readbyte 是放在线程中的,因为接收方不知道发送方何时会传输数据所以一直会读取,知道有数据来。