2013-03-18 102 views
0

我在更新WPF中for循环内的画布时遇到问题。 在我的应用程序中,我有来自很多帧的stickfigures的数据,我想绘制2个不同录音的贴图。我知道绘图功能的作品,但我无法让我的代码不断更新画布。我只能看到最后一帧的贴图。我知道,对于其他框架,stickfigures正在计算,但它们不显示在画布上。WPF:更新for循环中的画布

我使用PolyLine函数绘制贴图。

这里是我使用的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); 
     } 

感谢您的帮助。

+3

您需要一个'BackgroundWorker',在UI线程中执行'Thread.Sleep()'来冻结您的应用程序。 – 2013-03-18 19:13:38

+0

请发布您需要的屏幕截图,因为有很多更好,更干净和更具可扩展性的方式来满足您的需求。 – 2013-03-18 19:26:10

+1

如果你创建一个“棒图”,你应该绑定一个ObservableCollection指向你的UI中的一行行列表 – 2013-03-18 20:12:59

回答

0

你不能在GUI上看到任何更新,因为你的单线程应用程序正在使用GUI线程来循环。解决方案可以使用计时器或辅助线程。

+0

我应该如何用计时器或辅助线程来做到这一点?我只是一个开始的程序员。 – 2013-03-19 10:58:28