【问题标题】:WPF: updating a canvas in a for loopWPF:在 for 循环中更新画布
【发布时间】: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 个彼此相邻的不同录音。

标签: c# wpf xaml canvas


【解决方案1】:

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

【讨论】:

  • 我应该如何使用计时器或辅助线程来做到这一点?我只是一个初级程序员。
猜你喜欢
  • 1970-01-01
  • 2013-02-08
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 2011-09-26
相关资源
最近更新 更多