问题描述
我编写了一个应用程序,它以非常快的速度从串行设备中读取数据.然而,串行端口对象在连续运行约 20 分钟后未能触发 DataReceieved 事件.以编程方式断开和重新连接串行允许事件再次工作,但仅再持续 20 分钟.
I've written an application which reads from a serial device at a very fast rate. The serial port object however, fails to fire the DataReceieved event after about 20 min of continuous operation. Disconnecting and reconnecting the serial programmatically allows the event to work again but for only another 20 min.
我尝试在每个 DataReceived 事件之后使用 DiscardInBuffer,这似乎已经解决了问题.但是这种方法会消耗大量的 cpu 时间,并且会降低应用程序的性能.MSDN 提到丢弃串行驱动程序接收缓冲区中的数据"方法,但没有建议何时使用.
I tried using DiscardInBuffer after every DataReceived event and this has appeared to have solved the problem. But the method consumes a lot of cpu time and is degrading the performance of the application. MSDN mentions that the method "Discards data from the serial driver's receive buffer.", but fails to suggest when it should be used.
应该何时以及如何使用 DiscardInBuffer,我是否在针对特定问题的正确上下文中使用它?
When and how should DiscardInBuffer be used, and am I using it in the correct context for my particular problem ?
执行ErrorReceived事件后,返回的事件数据表明事件类型为RXOver".
After implementing the ErrorReceived event, the event data returned indicated the event type was an "RXOver".
推荐答案
经过更多调查,我的问题似乎是一个更根本的问题.由于数据以极快的速度涌入,因此需要连续清除或处理 SerialPort 缓冲区以防止RXOver"错误.我通过在 DataReceived 事件期间读入另一个缓冲区并在另一个单独的线程中处理它来实现这一点.
After more investigations, it appears my problem was more a fundamental issue. Since the data was flooding in at a hot pace, the SerialPort buffer needed to be cleared or processed continuously to prevent the "RXOver" error. I achieved this by reading into another buffer during the DataReceived event and processed it in another separate thread.
据我了解,DiscardInBuffer 只能选择性地用于清除端口内容以进行初始化,例如在打开端口之前.清除驱动程序缓冲区的过程确实需要一些时间才能完成,因此应该在面向性能的应用程序中明智地使用.
From my understanding the DiscardInBuffer should only be used selectively to clear the contents of the ports for initialisation purposes, such as before opening a port. The process of clearing the driver buffer does take some time to complete and therefore should be used wisely in a performance orientated application.
这篇关于如何正确使用 SerialPort.DiscardInBuffer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)