C# WPF:更新for循环中的画布

C# WPF:更新for循环中的画布,c#,wpf,xaml,canvas,C#,Wpf,Xaml,Canvas,我在WPF中更新for循环中的画布时遇到问题。 在我的应用程序中,我有来自许多帧的stickfigures的数据,我想画两个相邻的不同录制的stickfigures。我知道绘图功能可以工作,但我无法让我的代码不断更新画布。我只能看到最后一帧的粘贴图。我知道对于其他帧,正在计算stickfigures,但它们没有显示在画布上 我使用多段线函数绘制粘贴图形 这是我使用的for循环 for (int i = 0; i < recording1.Count; i++) {

我在WPF中更新for循环中的画布时遇到问题。 在我的应用程序中,我有来自许多帧的stickfigures的数据,我想画两个相邻的不同录制的stickfigures。我知道绘图功能可以工作,但我无法让我的代码不断更新画布。我只能看到最后一帧的粘贴图。我知道对于其他帧,正在计算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);
        }
for(int i=0;i

谢谢您的帮助。

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

您需要一个
BackgroundWorker
,在UI线程中执行
线程。Sleep()
将冻结您的应用程序。请发布您所需的屏幕截图,因为有可能有一种更好、更干净、更具可扩展性的方法来完成您所需的工作。如果您创建一个“stick figure”如果您使用.net 4.5,将方法更改为async,并使用
wait Task.Delay(100)
而不是
Thread.Sleep(100),那么您应该将一个可观察到的点集合绑定到UI中的一系列行,而不考虑有更干净的方法来实现这一点
是更新内容的快速修复方法。@HighCore您可以在这个链接中找到一个屏幕截图:我有60帧长的录制,每帧有40个值。20个点,每个点有一个X和一个Y值。我需要看到两个不同的录制,相邻。我应该如何使用计时器或辅助线程来完成此操作?我很抱歉这是一个初级程序员。