如何阻止UI冻结?

时间:2011-04-27 02:56:27

标签: silverlight silverlight-4.0 silverlight-3.0

当我向Canvas添加许多项目时,为什么UI会冻结?假设我有一个从1到1000的循环。我只能在添加所有1000个元素后看到所有元素。为什么Canvas不显示项目,因为它们一次添加或删除一个项目?

我能做些什么来达到这个效果?我希望为元素添加动画,因为它们一次一个接一个地添加到Canvas中。但是动画没有显示,因为UI只是冻结了。

提前致谢:)

3 个答案:

答案 0 :(得分:1)

也许您可以使用计时器,并在每个刻度上添加较少数量的元素?这样可以确保每次添加之间都有一些刷新。

在一个画布上有很多形状的项目中,我发现在开始时预先分配和添加所有形状是有帮助的,然后只需切换它们的可见性。我不知道这对我所处的情况是否有用或只是特定的。

答案 1 :(得分:0)

在VB.NET中,我们使用Application.DoEvents()但我觉得它在Silverlight中是不可能的。

阅读这篇文章:http://forums.silverlight.net/forums/p/12015/38635.aspx

希望这有帮助!

答案 2 :(得分:0)

您的代码正在UI线程(更新屏幕的同一线程)上执行。因此,当您执行任何计算密集型操作时,UI将冻结。长时间运行的操作必须在单独的线程中运行,以便应用程序保持响应。启动一个新线程,从你的线程中迭代循环并实例化你的对象。要将对象添加到画布,您必须使用Dispatcher来确保代码的一部分在UI线程上运行。

MyElement element = new MyElement();
Dispatcher.BeginInvoke(() => AddElementToCanvas(element));