【发布时间】:2015-02-16 23:37:03
【问题描述】:
我的 WPF 应用程序上有一个启动画面。启动窗口在我的App 类中定义为一个字段,在Startup 事件中,我执行各种可能需要一些时间的初始化功能,显示提示/窗口等。我的启动事件看起来像这样:
Startup += (_,__) =>
{
mySplashScreen.UpdateMessage("Initializing Component A...");
InitializeComponentA();
mySplashScreen.UpdateMessage("Initializing Component B...");
InitializeComponentB();
mySplashScreen.UpdateMessage("Initializing Component C...");
InitializeComponentC();
mySplashScreen.UpdateMessage("Opening application...");
};
对于闪屏更新方法,我尝试了以下方法:
- 使用实现
INotifyPropertyChanged的 ViewModel 类,绑定到它,并更新视图模型的Message属性。 - 在代码隐藏中创建一个名为
Message的DependencyProperty,并对其进行绑定/更新。 - 直接设置属性(例如
myTextBlock.Text = splashMessage;) - 将启动画面放在单独的线程中,并通过
Dispatcher.Invoke()设置启动消息(使用DispatcherPriority.Send确保立即更新UI)。
我的问题是没有任何启动屏幕消息在窗口上更新/显示。 only 条件是在 InitializeComponentX() 方法之一显示对话框时更新初始 UI。在这种情况下,启动界面会更新。对于上述所有选项,我什至尝试过同步和异步等待(通过Thread.Sleep())几秒钟以查看 UI 是否会更新,但它永远不会更新。
为什么我的启动界面只有在我显示另一个对话框/窗口时才会更新?
【问题讨论】:
标签: c# wpf splash-screen