Multithreading 在Ui线程Silverlight之外创建UIElements
在我的silverlight 4.0应用程序中,在用户按下一个按钮后,我必须创建几个需要一些时间(5-10秒)的UI对象。在此期间,用户界面当然会冻结。我决定将这些对象的创建放在后台工作程序中,这样UI至少可以显示进度条 但这个解决方案不起作用。要创建UI对象,您必须在UI线程中。 如果我将这些对象的创建放在Dispatcher.BeginInvoke()中,我的UI会再次冻结。在大多数情况下,甚至没有显示进度条。有办法解决这个问题吗 silverlight在后台创建UI对象时,我可以显示进度条吗?看看这个论坛。这可能会有帮助 而不是使用: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对象时,我可以显示进度条
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中执行此操作。顺便说一句,你试过这个吗?