我一直试图在应用程序加载其初始数据时保持应用程序的启动画面不挂起,但是我还没有成功地找到这样做的方法。
以下是我尝试的代码:
SplashView splashScreen = new SplashView();
new Thread((ThreadStart)delegate
{
splashScreen.Dispatcher.Invoke((Action)delegate
{
while ((bool)splashScreen.Dispatcher.Invoke((Func<SplashView, bool>)delegate(SplashView sView) { return sView.IsEnabled; }, DispatcherPriority.Render, new object[] { splashScreen }))
{
splashScreen.Dispatcher.Invoke((Action<SplashView>)delegate(SplashView sView) { sView.UpdateLayout(); }, DispatcherPriority.Render, new object[] { splashScreen });
Thread.Sleep(10);
}
}, DispatcherPriority.Render, new object[] { });
}).Start();
有人可以告诉我如何做到这一点吗?
谢谢, 亚历克斯。
答案 0 :(得分:2)
BackgroundWorker
)。Dispatcher.Invoke()
将挂起您的UI线程,因为多次调用会因同步执行代码而阻塞。请改用Dispatcher.BeginInvoke()
。它更有效地使用调度程序队列。 DispatcherPriority
对您有利。任何具有较低重要性的Splash UI通知都可以显示在更高优先级的通知之后。Dispatcher.PushFrames()
。Wait
/ Pulse
在较慢的完成时通知其他人。不相关的数据可以加载到不同的线程中,例如可以使用不同的线程加载财务相关数据和员工相关数据。