2012-02-09 5 views
0

필자는 목록을 가지고 있으며 목록을 반복하고 매 초마다 요소를 그립니다. 캔버스 요소의 AddChild 루틴을 사용하려고합니다. 이것은 제가하고있는 일종의 것입니다. 나는 스레딩 문제 해결을 시도하는 배경 노동자와 Dispatcher.Invoke을 시도했지만 행운과 :초당 하나의 요소 그리기

public class MyWindow : Window 
{ 
    protected void OnMouseClick(object sender, MouseEventArgs args) 
    { 
    List<UIElement> elements = GetElements(); 

    Canvas canvas = new Canvas(); 
    this.AddChild(canvas); 

    foreach (var k in elements) 
    { 
     canvas.Children.Add(k); 
     Thread.Sleep(1000); 
    } 
    } 
} 

나는 기본적 종류의 모양과 함께 슬라이드 쇼를 그릴려고하지만 최대 잠금 이 줄은 this.AddChild(canvas)입니다. 분명히 스레딩에 문제가있는 것은 분명하지만 알아낼 수는 없습니다.

매초마다 한 모양을 렌더링하도록 코드를 수정하려면 어떻게합니까? 나는 다음 모양을 그리기 전에 결국 이전 모양을 지우고 싶습니다. 그러나 나중에 나타날 수 있습니다.

답변

0

당신은 BackgroundWorkerDispatcher 사용할 수 있습니다

List<UIElement> elements = GetElements(); 

Canvas canvas = new Canvas(); 
this.AddChild(canvas); 

var bw = new BackgroundWorker(); 

bw.DoWork += (sender, e) => 
{ 
    foreach (var k in elements) 
    { 
    Dispatcher.BeginInvoke(new Action(() => canvas.Children.Add(k))); 
    Thread.Sleep(1000); 
    } 
}; 

bw.RunWorkerAsync(); 
관련 문제