每秒绘制一个元素

时间:2012-02-09 04:15:24

标签: c# wpf c#-4.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)。我显然对线程做错了,但我无法弄明白。

如何修改代码以每秒向窗口渲染一个形状。我想在绘制下一个形状之前最终清除之前的形状,但这可以在以后发生。

1 个答案:

答案 0 :(得分: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();