2013-03-18 2 views
0

WPF의 for 루프 내에서 캔버스를 업데이트하는 데 문제가 있습니다. 내 응용 프로그램에서 나는 프레임의 많은에서 stickfigures에서 데이터를 가지고 있고 서로 옆에 2 개의 녹음의 stickfigures를 그려 싶습니다. 드로잉 함수가 작동하는 것을 알고 있지만 캔버스를 지속적으로 업데이트하는 코드를 얻을 수 없습니다. 나는 마지막 프레임에서의 스틱 픽 (stickfigure)만을 볼 수있다. 나는 다른 프레임들에 대해 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()을 실행하면 애플리케이션이 중단됩니다. –

+0

필요한 것을 할 수있는 더 나은 방법, 깨끗하고 확장 가능한 방법이 있기 때문에 필요한 항목의 스크린 샷을 게시하십시오. –

+1

"막대기 그림"을 만드는 경우 ObservableCollection을 UI의 라인 목록에 바인딩해야합니다. –

답변

0

단일 스레드 응용 프로그램이 GUI 스레드를 사용하여 루프를 돌리기 때문에 GUI에서 업데이트를 볼 수 없습니다. 솔루션은 타이머 또는 보조 스레드를 사용할 수 있습니다.

+0

그리고 타이머 또는 보조 스레드로 어떻게해야합니까? 나는 처음 프로그래머 일뿐입니다. –