如何获得对WPF的启动画面的参考?

问题描述:

WPF允许您通过adding an image file to your project and setting its build property to SplashScreen创建启动画面。关于这个功能的好处是(而不是滚动我自己的启动画面)是当WPF应用程序启动时(这可能会在较早的机器上花费大量时间),启动画面立即显示如何获得对WPF的启动画面的参考?

是否有可能在运行时获得对此启动画面的引用?有SplashScreen class,但不幸的是,它没有静态的“当前”方法或类似的东西。

任何对底层启动画面窗口(Window instance或甚至只是底层Windows API窗口句柄)的引用对我来说都可以。

背景:有一个bug in WPF这会导致应用程序如果在启动画面仍然可见关闭应用程序的主窗口崩溃。错误won't be fixed,所以我需要通过保持我的应用程序“活着”,直到闪屏已经消失解决它。我目前通过Thread.Sleep(2000)这样做,在我的主窗口的Closing事件中,但这很丑陋,不可靠。我宁愿等待(仅),直到启动画面窗口消失。

+1

'睡眠'是完全没问题的,当你无论如何等待时,屏幕上没有任何东西,没有人会在意某些过程停留的时间更长。或者你还有其他问题?尽管你可以将'Sleep'移动到'App'中。 – Sinatr

您可以显示和App.xaml.cs关闭SplashScreen明确自己在OnStartup方法或构造您App类:

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 

    SplashScreen splashScreen = new SplashScreen("splash.png"); 
    splashScreen.Show(false); 

    //init your main window here... 

    splashScreen.Close(TimeSpan.FromSeconds(1)); 
} 

那么你应该能够控制闪屏和应用程序二者的寿命。

+0

这是否会在Build Action方法中显示初始屏幕? – Heinzi

+0

是的,你可以在调用基类的方法之前或在App类的构造函数中放置它。应用程序类创建了应用程序的Main方法中发生的第一件事,因此不会早于此。 – mm8