在我的silverlight 4.0应用程序中,有一次,在用户按下按钮后,我必须创建一些需要一些时间(5-10秒)的UI对象。在此期间,UI当然会冻结。我决定将这些对象的创建放在后台工作程序中,这样UI至少可以显示进度条。
但这种解决方案并不奏效。要创建UI对象,您必须在UI线程中。如果我把这些对象的创建放在Dispatcher.BeginInvoke()
中,我的UI就会冻结。在大多数情况下,甚至没有显示进度条。有办法绕过这个吗?
当silverlight在后台创建UI对象时,我可以显示进度条吗?
看看这个论坛帖子。这可能会有所帮助。
代替使用:
System.Windows.Threading.Dispatcher.BeginInvoke(() => {});
他们使用:
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => {});
在BeginInvoke()
内创建UI对象之前,可以尝试显示自定义消息。
示例:
private void CreateObjects()
{
myMsg.Text = "Loading...";
Dispatcher.BeginInvoke(() => { AddObjects() });
}
创建完所有对象后,请禁用该消息。
你也可以在进度条上尝试类似的方法。