2013-03-18 3 views
0

У меня возникла проблема с обновлением холста в цикле for в WPF. В моем приложении у меня есть данные из stickfigures из большого количества кадров, и я хочу нарисовать stickfigures из двух разных записей рядом друг с другом. Я знаю, что функция рисования работает, но я не могу заставить свой код постоянно обновлять холст. Я только вижу, что на самом деле я смотрю рисунок с последнего кадра. Я знаю, что для других фреймов вычисляются значения stickfigures, но они не отображаются на холсте.WPF: обновление холста в цикле for

Я рисую stickfigures, используя функции PolyLine.

Вот цикл, который я использую.

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», делая 'Thread.Sleep()' в потоке пользовательского интерфейса, чтобы заморозить ваше приложение. –

+0

Пожалуйста, разместите снимок экрана о том, что вам нужно, так как есть вероятность, что есть намного лучший, более чистый и масштабируемый способ сделать то, что вам нужно. –

+1

Если вы создаете «фигуру палки», вы должны привязать ObservableCollection точек к списку линий в вашем UI. –

ответ

0

Вы не видите обновления в графическом интерфейсе, потому что ваше приложение с одним потоком использует поток графического интерфейса для циклического перемещения. Решением может быть использование таймера или вторичного потока.

+0

И как мне это сделать с помощью таймера или вторичного потока? Я просто начинающий программист. –

Смежные вопросы