SerialPort 的超时问题

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

...全文
992 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenBenBears 2017-02-04
  • 打赏
  • 举报
回复
开线程Read端口(不阻塞),写缓存,再校验Data。
qbilbo 2017-02-03
  • 打赏
  • 举报
回复
每次收到数据都做粘包处理是必须的,至于你要的超时效果可以用定时器来解决。 至于每个会话用一个定时器还是所有会话共用一个定时器各有长短,自己取舍一下。
wugamp 2017-02-03
  • 打赏
  • 举报
回复
引用 1 楼 qq_28210551 的回复:
用异常吧 。
愿闻其详
qq_28210551 2017-01-20
  • 打赏
  • 举报
回复
用异常吧 。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧