我正在使用后台工作程序从设备读取数据值并在图表中显示。我使用BeginInvoke并更新图表中的值。问题是图表中的值会在延迟至少2 - 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,请尝试使用“任务”。