如何在 C# 中绘制流数据图表
-
06-07-2019 - |
题
我需要绘制流数据(9600 波特)的图表,该数据以 2-4 字节数据包形式从串行端口传入。在绘图之前需要对数据包进行处理。目前,我正在每个完整的数据包上引发一个事件,这会导致图形表单上的响应问题。
哪个是此问题的最佳解决方案:
- 缓冲数据并以定时间隔(即 500 毫秒)在事件中引发缓冲数据
- 构建缓冲区并让实例化对象在轮询时轮询缓冲数据/空缓冲区
- 其他 (?)
解决方案
我肯定会限制更新率。对于此类应用,通常每 300 毫秒一次就足够了。
基于此,一个好的实现是一个读取串行端口并将其添加到缓冲区的工作线程。UI线程可以使用定时器来查询数据并更新显示。
使用单独的线程,工作线程可以以更高的优先级运行,因此负载峰值可能会延迟显示更新,但不会丢失数据。
另外一个技巧是不要使用固定计时器,而是在更新完成后重新启动计时器。因此,如果更新需要大量时间,例如由于系统负载较高,您的更新速度会减慢,从而有效减少负载。
不隶属于 StackOverflow