【发布时间】:2011-04-09 09:13:30
【问题描述】:
我有一个简单的 WPF 窗口,上面有一个 Canvas,Canvas 有一个 Path 对象,Path 内有一个 GeometryGroup:
<Path
Stroke="Red"
StrokeThickness="3">
<Path.Data>
<GeometryGroup Children="{Binding Elements}" />
</Path.Data>
</Path>
所以我在调用 InitializeComponent() 之前初始化了 Elements 集合,它会正确显示。之后使用System.Timers.Timer 更新现有形状的点,以便它们移动。这行得通。但问题是我只看到画布在 WPF 窗口被鼠标移动时更新其结果。如果我把它留在那里,那么最后一张图片就会挂在那里,但积分会更新。
当我再次开始移动 WPF 窗口并且形状跳转到它们的最新位置时,我可以看到这一点。
关于如何解决这个问题以及为什么这样做的任何想法?
【问题讨论】:
-
我猜你做了你的委托来处理 UI 线程,如果不是它会抛出错误。如果我错了,请纠正我,但使用 System.Windows.Threading.DispatcherTimer 可能会更好,因为它直接在 UI 线程上调用
-
是的,我按照你说的做,所以它可以工作,但我需要在另一个线程上进行计算并更新 UI。我只更新元素,但这仍然需要在 UI 线程中完成。
-
好的,想试试这个?对于画布,我相信这些类似于 canvas.left。做一个简单的1。在你做你的计算之后,试着从你的计算线程中改变canvas.left的值。如果您可以调用该对象,请尝试调用。示例如下所示:cskardon.wordpress.com/2008/01/03/invoking-ui-changes-in-wpf