你为什么不使你的闪屏完全合格的XAML <window>
并在App.xaml中设置它为您的StartupUri:
<Application x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="SplashWindow.xaml">
在启动窗口的Load事件
然后你初始化主窗口(最好在其他地方,因此当你关闭飞溅时,实例会继续存在)。从这里您还可以指定一个x秒钟计时器,以显示主窗口/隐藏飞溅窗口。
using System.Threading;
/// -------------------------------
private Timer t;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
App.MainWindow = new MainWindow(); // Creates but wont show
t = new Timer(new TimerCallback(CloseSplash), null, new TimeSpan(0,0,10), new TimeSpan(0,0,0,0,-1));
// Do Other load stuff here?
}
private void CloseSplash(object info)
{
// Dispatch to UI Thread
Dispatcher.Invoke(DispatcherPriority.Normal, x => CloseSplashMain());
}
private void CloseSplashMain()
{
App.MainWindow.Show()
this.Close();
}
虽然您必须更改应用程序的主窗口行为,否则关闭splash窗口将导致应用程序关闭。
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
App.Current.ShutdownMode = ShutdownMode.OnLastWindowClose;
}
}
另外,不要忘记当你完成后处置你的计时器。这是一个IDisposable
,并会继续触发该方法,除非它停止。
你做WPF和你不想XAML? –
我主要更喜欢C#代码。我的意思是包含C#和Xaml的答案都是完美的。 – msharpp