2012-02-09 42 views
0

我有一個List,我想遍歷列表並每秒繪製一個元素。我試圖使用canvas元素的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();