背景工人和图表更新

时间:2011-05-27 02:31:19

标签: c# .net charts backgroundworker begininvoke

我正在使用后台工作程序从设备读取数据值并在图表中显示。我使用BeginInvoke并更新图表中的值。问题是图表中的值会在延迟至少2 - 3秒的时间内更新,而不是实时。图表中的更新速度也会有所不同,图表会在一瞬间更新所有以前的值。

如何实时制作?任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:2)

我建议选择其中一种。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这就是我所说的UI争用。 BeginInvoke异步编程的本质取决于源的拉动并将其推送到UI。我怀疑你的BeginInvoke在这里花了更多的时间。我将尝试“DispatchTimer”,或者如果您使用的是C#4.0,请尝试使用“任务”。