我正在使用后台工作人员从设备读取数据值并显示在图表中。我使用 BeginInvoke 并更新图表中的值。问题是图表中的值至少有 2-3 秒的延迟更新,而且不是实时的。图表中的更新速度也有所不同,在某一时刻,图表会使用所有先前的值进行更新。
我如何使它成为实时的?非常感谢任何帮助。
我正在使用后台工作人员从设备读取数据值并显示在图表中。我使用 BeginInvoke 并更新图表中的值。问题是图表中的值至少有 2-3 秒的延迟更新,而且不是实时的。图表中的更新速度也有所不同,在某一时刻,图表会使用所有先前的值进行更新。
我如何使它成为实时的?非常感谢任何帮助。
我会建议2个选项之一。
1)使图表本身成为嵌入主 UI 的单独 WPF 表单,并使用 Invoke 而不是 BeginInvoke 来更新图表(这将在更新时冻结图表 UI,但谁在乎)
2)在 UI 端使用DispatchTimer来提取数据,而不是让处理将其推送到 UI ......根据我的经验,BeginInvoke 从来没有表现得很好。
我怀疑您有太多更新,并且它使消息队列拥塞。消息很可能会乱序到达。您可能可以将多个更新合并到一个BeginInvoke
. 或者,您可以从设备中读取所有值,并使用 仅提供最新值Invoke
。Invoke 将确保它在您的下一个Invoke
.
这就是我所说的 UI 争用。BeginInvoke Async 编程的本质取决于从源头拉取并将其推送到 UI。我怀疑您的 BeginInvoke 在这里需要更多时间。我将尝试“DispatchTimer”,或者如果您使用的是 C# 4.0,请尝试使用“Tasks”。