• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

SerialPort 的超时问题

wugamp 2017-01-18 05:19:19
我在调用 SerialPort 类来从串口读数据,有个超时问题让人头疼,就是对方没把数据包发完整就死掉了。
现在有两个办法。
一个是 用 SerialPort 的 read 方法,配合 ReadTimeOut 属性。但这样会导致阻塞,浪费CPU。
另一个办法是用 SerialPort 的 DataReceived 钩子,收到一个字节就调用一次钩子函数,把字节读到专门的数组里。当然了,如果在一定时间内没读够就是超时。这个办法不阻塞。可是,难道我要每次读个字节进来的时候都去读取系统时间、判断是否超时吗?那太累了!
有没有某种定时的事件,启动后过了一定时间就会触发。如果在触发前我已经读够了数据,我就撤销这个事件。
谢谢!

...全文
377 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
BenBenBears 2017-02-04
开线程Read端口(不阻塞),写缓存,再校验Data。
回复
qbilbo 2017-02-03
每次收到数据都做粘包处理是必须的,至于你要的超时效果可以用定时器来解决。 至于每个会话用一个定时器还是所有会话共用一个定时器各有长短,自己取舍一下。
回复
wugamp 2017-02-03
引用 1 楼 qq_28210551 的回复:
用异常吧 。
愿闻其详
回复
qq_28210551 2017-01-20
用异常吧 。
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2017-01-18 05:19
社区公告

让您成为最强悍的C#开发者