[英]Visualization of real-time simulation process in WPF C# .NET
我的模拟过程由迭代组成,其中模拟器计算一些数据,并以这种方式,在每次迭代中,通过离散时间移动。 除此之外,模拟器必须在某些周期性间隔内用新数据更新组件参数。 模拟器的组件用于计算迭代。
我当前的模型基于间隔为 20 秒的计时器。 对于每个计时器滴答,模拟器首先尽可能快地计算 20 次迭代,然后在其余时间(20 秒 - 模拟 20 次迭代的时间),如果新数据可用,它将使用新数据更新组件参数。 它的效果很好,但是...
...我使用 MVVM 模式在 WPF 中实现了可视化器,并且我希望该可视化器在模拟开始后,以正确的时间间隔显示每次迭代的状态。 因此,如果每次迭代代表 1 秒的时间间隔,我希望可视化器每秒更改可视化状态。 我使用可视化器中的计时器和模拟器中的状态缓冲区来完成它。 基本上,模拟器将计算出的状态排入队列,而可视化器将每个计时器滴答的状态排入队列。 它运行良好,但有一些例外。
所以我在考虑替代解决方案。 我在可视化器中有一个计时器,并且对于计时器的每个滴答声,在后台线程中调用在模拟器中异步计算新迭代的方法。 在可视化器中的异步回调中,可视化器根据模拟器中的新计算状态刷新可视化。 使用这种方法,我在刷新模拟器的组件时遇到问题,因为它们需要更多的时间来刷新,然后是一个计时器间隔持续时间。 也许我可以在新的后台线程中刷新组件,一旦更新完成,只需调用组件中的方法,将新值复制到组件的参数值。
此外,模拟器是实时的,因此它必须与实时保持同步。
如果您能告诉我哪种方法更好以及我如何改进方法,那将会很有帮助,而且如果有人有更好的方法,我会很高兴阅读并使用它:)
谢谢。
由于您使用的是 WPF,如果您使用数据绑定,您的 UI 将在数据更新时自动更新——但有一些例外,主要是ObservableCollections 中的项目。 如果您使用ObservableCollections ,则必须绑定到集合中的每个单独项目。 您可以手动执行此操作或编写从 OC 派生的类,该类在添加项目时执行并在删除项目时分离(这对于避免内存泄漏很重要)
除了使用计时器进行更新,您还可以在使用mvvm 架构时在 wpf 中使用数据绑定,并且最好包含 **
通知属性已更改
** 在您的视图模型中类并将元素直接绑定到组件,这样您的问题就会得到解决
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.