【发布时间】:2013-03-19 17:58:56
【问题描述】:
我在 WPF 的 for 循环中更新画布时遇到问题。 在我的应用程序中,我有来自很多帧的 Stickfigures 的数据,我想绘制 2 个彼此相邻的不同录音的 Stickfigures。我知道绘图功能有效,但我无法让我的代码不断更新画布。我只能看到最后一帧的简笔画。我知道对于其他帧,正在计算简笔画,但它们没有显示在画布上。
我使用折线函数绘制简笔画。
这是我使用的 for 循环。
for (int i = 0; i < recording1.Count; i++)
{
skeletCanvas1.Children.Clear();
skeletCanvas2.Children.Clear();
skeletCanvas1.Children.Add(drawLine(points1((double[])recording1[i]), brush1));
skeletCanvas1.Children.Add(drawLine(points2((double[])recording1[i]), brush1));
skeletCanvas1.Children.Add(drawLine(points3((double[])recording1[i]), brush1));
skeletCanvas1.Children.Add(drawLine(points4((double[])recording1[i]), brush1));
skeletCanvas1.Children.Add(drawLine(points5((double[])recording1[i]), brush1));
skeletCanvas2.Children.Add(drawLine(points1((double[])recording2[i]), brush2));
skeletCanvas2.Children.Add(drawLine(points2((double[])recording2[i]), brush2));
skeletCanvas2.Children.Add(drawLine(points3((double[])recording2[i]), brush2));
skeletCanvas2.Children.Add(drawLine(points4((double[])recording2[i]), brush2));
skeletCanvas2.Children.Add(drawLine(points5((double[])recording2[i]), brush2));
skeletCanvas1.UpdateLayout();
skeletCanvas2.UpdateLayout();
System.Threading.Thread.Sleep(100);
}
感谢您的帮助。
【问题讨论】:
-
你需要一个
BackgroundWorker,在UI线程中执行Thread.Sleep()会冻结你的应用程序。 -
请张贴您需要的屏幕截图,因为有可能有更好、更简洁、更具可扩展性的方式来满足您的需求。
-
如果您创建“简笔画”,您应该将 ObservableCollection 点绑定到 UI 中的线列表
-
暂且不说有更简洁的方法可以实现这一点,如果您使用的是 .net 4.5,将方法更改为异步并使用
await Task.Delay(100)而不是Thread.Sleep(100)是快速解决问题的方法让事情更新。 -
@HighCore 您可以在此链接中找到屏幕截图:tinypic.com/r/10893xz/6 我有 60 帧长的记录,每帧我有 40 个值。 20 个点,每个点有一个 X 和一个 Y 值。我需要查看 2 个彼此相邻的不同录音。