我正在使用后台工作程序从设备读取数据值,并使用BeginInvoke将其显示在chart.mI中,然后更新图表中的值。问题是图表中的值更新至少有2-3秒的延迟,并且不是实时的。图表中的更新速度也不同,在某个时刻,图表将使用所有以前的值进行更新。
我怎么才能做到实时呢?任何帮助都是非常感谢的。
发布于 2011-05-27 12:06:29
我会推荐两个选项中的一个。
1)使图表本身成为嵌入到主UI中的单独的WPF表单,并使用Invoke而不是BeginInvoke来更新图表(这将在更新时冻结图表UI,但谁关心呢)
2)在UI端使用DispatchTimer来拉取数据,而不是让处理将数据推送到UI...in my experience BeginInvoke,而不是执行得很好。
发布于 2011-05-27 10:38:18
我怀疑你有太多的更新,这会使消息队列拥塞。消息很可能会无序到达。您可以将多个更新合并到单个BeginInvoke中。或者,您可以读取设备中的所有值,并使用Invoke仅提供最新的值。Invoke将确保它在您的下一个Invoke之前交付。
发布于 2011-05-27 13:12:59
这就是我所说的UI争用。BeginInvoke异步编程的本质取决于从源提取并将其推送到UI。我怀疑你的BeginInvoke在这里花了更多的时间。我将尝试使用"DispatchTimer“,或者如果您使用的是C# 4.0,请尝试使用"Tasks”。
https://stackoverflow.com/questions/6147247
复制相似问题