0

在我的silverlight 4.0应用程序中,在用户按下按钮之后,我必须创建少量需要一些时间(5-10秒)的UI对象。在此期间,UI会冻结,当然。我决定将这些对象创建到后台工作器中,以便用户界面至少可以显示进度条。在Ui线程外部创建UIElements,Silverlight

但是这种解决方案不起作用。要创建UI对象,你必须在UI线程中。 如果我把这些对象的创建放在Dispatcher.BeginInvoke()以内,我的UI就会冻结。在大多数情况下甚至没有显示进度条。有没有解决的办法?

Silverlight在后台创建UI对象时可以显示进度条吗?

回答

0

看看这个论坛post。它可能有帮助。

而不是使用:

System.Windows.Threading.Dispatcher.BeginInvoke(() => {}); 

他们使用:

System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => {}); 
0

你可以试试里面BeginInvoke()创建UI对象之前显示的自定义消息。

实施例:

private void CreateObjects() 
{ 
    myMsg.Text = "Loading..."; 
    Dispatcher.BeginInvoke(() => { AddObjects() }); 
} 

一旦创建的所有对象,禁用消息。

您也可以使用Progress Bar尝试类似的事情。

+0

是的,但要显示myMsg你需要访问UIThread,如果对象是在同一个线程上创建的Ui没有时间去更新 – grabah 2012-07-24 08:41:47

+0

我在这里想说的是用Progress Bar而不是Progress Bar来显示消息,更新正在进行中。 Officourse你需要在UIThread中做到这一点。顺便说一句,你尝试过吗? – Vivek 2012-07-25 11:25:32