Multithreading 在Ui线程Silverlight之外创建UIElements

Multithreading 在Ui线程Silverlight之外创建UIElements,multithreading,silverlight,c#-4.0,backgroundworker,uielement,Multithreading,Silverlight,C# 4.0,Backgroundworker,Uielement,在我的silverlight 4.0应用程序中,在用户按下一个按钮后,我必须创建几个需要一些时间(5-10秒)的UI对象。在此期间,用户界面当然会冻结。我决定将这些对象的创建放在后台工作程序中,这样UI至少可以显示进度条 但这个解决方案不起作用。要创建UI对象,您必须在UI线程中。 如果我将这些对象的创建放在Dispatcher.BeginInvoke()中,我的UI会再次冻结。在大多数情况下,甚至没有显示进度条。有办法解决这个问题吗 silverlight在后台创建UI对象时,我可以显示进度条

在我的silverlight 4.0应用程序中,在用户按下一个按钮后,我必须创建几个需要一些时间(5-10秒)的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() });
}
创建所有对象后,禁用该消息


您也可以在进度条上尝试类似的操作。

是的,但要显示myMsg,您需要访问UIThread,如果在同一线程上创建对象,Ui将没有时间更新。我想说的是,在更新过程中,您可以显示一条消息,而不是进度条。当然,您需要在UIThread中执行此操作。顺便说一句,你试过这个吗?