C# 每秒绘制一个元素

C# 每秒绘制一个元素,c#,wpf,c#-4.0,C#,Wpf,C# 4.0,我有一个列表,我想遍历该列表并每秒绘制一个元素。我正在尝试使用canvas元素的AddChild例程。这就是我正在做的;我尝试了后台工作程序和调度程序。调用以尝试解决线程问题,但没有成功: public class MyWindow : Window { protected void OnMouseClick(object sender, MouseEventArgs args) { List<UIElement> elements = GetElements(

我有一个列表,我想遍历该列表并每秒绘制一个元素。我正在尝试使用canvas元素的AddChild例程。这就是我正在做的;我尝试了后台工作程序和调度程序。调用以尝试解决线程问题,但没有成功:

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);
     }
   }
}
公共类MyWindow:Window
{
鼠标单击时受保护的空(对象发送者、鼠标指针参数)
{
List elements=GetElements();
画布=新画布();
这个.AddChild(canvas);
foreach(元素中的变量k)
{
canvas.Children.Add(k);
睡眠(1000);
}
}
}
我基本上是在尝试用形状绘制幻灯片,但它锁定在这行:
this.AddChild(canvas)
。很明显,我在穿线方面出了点问题,但我想不出来

如何修改代码以每秒向窗口渲染一个形状。在绘制下一个图形之前,我希望最终清除上一个图形,但这可以在以后进行。

您可以使用a和:

List elements=GetElements();
画布=新画布();
这个.AddChild(canvas);
var bw=新的BackgroundWorker();
bw.DoWork+=(发送方,e)=>
{
foreach(元素中的变量k)
{
Dispatcher.BeginInvoke(新操作(()=>canvas.Children.Add(k));
睡眠(1000);
}
};
RunWorkerAsync();
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();