【发布时间】:2016-05-11 09:52:16
【问题描述】:
我有一个自定义图形控件,它使用Polyline 对象来呈现波形。
<Polyline Name="Line" Points="{Binding LinePoints}"
Stroke="{Binding LineColor}"
StrokeThickness="{Binding LineThickness}">
在我的 ViewModel 中,我将通过 DispatcherTimer 每隔一段时间(50-200 毫秒)生成不同的“LinePoints”集。绑定工作得很好,我在视图中得到了动画波形,除了它在用户界面中造成了明显的延迟。例如,当我右键单击 Window 中的其他内容时,上下文菜单会出现非常非常滞后的动画。
当然,我可以将计时器更改为每 500 毫秒计时一次,这样延迟就会大大减少。但是,这会使我的图表看起来很草率。有什么方法可以将其中一些转移到另一个线程?
(旁注:LinePoints的生成不是导致延迟的主要原因。每一代使用大约1ms的执行时间。这个值是从System.Diagnostics.Stopwatch获得的)
【问题讨论】:
-
你怎么知道什么时候应该更新你的折线控件?应用程序中的哪些操作告诉您更新它?在我要去的地方,我相信您使用错误的方法来解决您的问题。
-
折线只是简单地模拟一个图形的波形,这个波形预计会非常频繁地移动和变化。
-
你提到了波形,所以它应该随着声音参数的变化而更新?
-
它只是在波形变化时更新。波形可以来自声音或任何东西。但预计它会非常频繁地变化。目前,我正在通过一个函数在 100 毫秒内生成数千个
Points 来模拟它。 -
或者更确切地说,一个生成器函数,通过计时器每 100 毫秒调用一次。
标签: c# wpf multithreading rendering lag