1

我正在使用后台工作人员从设备读取数据值并显示在图表中。我使用 BeginInvoke 并更新图表中的值。问题是图表中的值至少有 2-3 秒的延迟更新,而且不是实时的。图表中的更新速度也有所不同,在某一时刻,图表会使用所有先前的值进行更新。

我如何使它成为实时的?非常感谢任何帮助。

4

3 回答 3

2

我会建议2个选项之一。

1)使图表本身成为嵌入主 UI 的单独 WPF 表单,并使用 Invoke 而不是 BeginInvoke 来更新图表(这将在更新时冻结图表 UI,但谁在乎)

2)在 UI 端使用DispatchTimer来提取数据,而不是让处理将其推送到 UI ......根据我的经验,BeginInvoke 从来没有表现得很好。

于 2011-05-27T04:06:29.277 回答
0

我怀疑您有太多更新,并且它使消息队列拥塞。消息很可能会乱序到达。您可能可以将多个更新合并到一个BeginInvoke. 或者,您可以从设备中读取所有值,并使用 仅提供最新值Invoke。Invoke 将确保它在您的下一个Invoke.

于 2011-05-27T02:38:17.533 回答
0

这就是我所说的 UI 争用。BeginInvoke Async 编程的本质取决于从源头拉取并将其推送到 UI。我怀疑您的 BeginInvoke 在这里需要更多时间。我将尝试“DispatchTimer”,或者如果您使用的是 C# 4.0,请尝试使用“Tasks”。

于 2011-05-27T05:12:58.677 回答