2012-02-09 14 views
0

私はリストを持っています。リストを繰り返して1秒ごとに要素を描画したいと思います。私は、キャンバス要素のAddChildルーチンを使用しようとしています。これは私がやっていることのようなものです。私は、スレッドの問題を解決しようとする背景の労働者とDispatcher.Invokeを試してみたが、運と:1秒間に1つの要素を描画する

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)。私は明らかにスレッディングに間違ったことをしていますが、わかりません。

1秒ごとに1つのシェイプをウィンドウにレンダリングするようにコードを変更するにはどうすればよいですか。私は最終的に次の図形を描く前に以前の図形をクリアしたいが、それは後で来ることができる。

答えて

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(); 
関連する問題