我有一个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 :(得分:0)
您可以使用BackgroundWorker和Dispatcher:
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();