0

我正在使用 C# 为 Windows 开发 OBD2 扫描仪应用程序。我希望有人能告诉我在从串行端口读取响应之前等待汽车 ecu 响应(使用 thread.Sleep())的最佳时间。

我正在使用蓝牙适配器进行开发,波特率为 9600。我目前将等待时间设置为 100 毫秒,但我希望尽可能短得多。我只是不想遇到在端口未准备好时尝试读取数据的情况。我想在流畅的 GUI 和舒适的错误余量之间取得良好的平衡。

更新:感谢这些想法。处理 DataReceived 是一个很好的一般想法,但我正在休眠线程的原因是我需要定期轮询 ECU,以便我可以执行诸如更新 RPM 仪表之类的操作。我正试图找到一个甜蜜点,在那里我可以从 ECU 获得尽可能多的代表,而不会压倒它。如果我只轮询一次,那么只需处理一个事件就可以了,但我需要知道轮询之间可接受的间隔是多少。我肯定会将我的代码更改为事件驱动的,但我仍然需要知道民意调查之间的可观时间有多长。

4

2 回答 2

2

与其使用 Thread.Sleep(),不如生成一个不断尝试从流中读取的后台线程。当数据被完全读取后,触发一个事件让主线程处理。只要您打开了端口,就应该没有问题。

于 2013-06-05T13:32:06.067 回答
0

我决定跟随我的汽车内置行车电脑的引导,每 1000 毫秒刷新一次值,或者更准确地说,每秒刷新 10 个值,在 100 毫秒、200 毫秒、300 毫秒等时一次刷新一次。

我还优先考虑那些变化更频繁的东西,比如即时消耗、RPM 和一些专门的传感器。像电池电压、温度和燃料水平这样的事情实际上只需要分别每 5、10 和 20 秒进行一次轮询,因此有很大的优先级空间。

于 2013-07-12T07:24:37.693 回答