关闭启动画面时,WPF应用程序关闭

时间:2018-08-03 09:53:46

标签: c# wpf multithreading splash-screen

我想在新线程中向我的WPF应用添加启动屏幕(因为在加载“主”窗口的数据时,我的动画启动屏幕挂起了)。代码:

SplashScreenWindow splashScreenWindow = null;
Thread newWindowThread = new Thread(() =>
{
    splashScreenWindow = new SplashScreenWindow();
    splashScreenWindow.ShowDialog();
});
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();

   data loading...

_mainWindow.Show();
splashScreenWindow.Close();

我的问题是我关闭启动画面时程序关闭。

2 个答案:

答案 0 :(得分:2)

我做了类似的事情,这对我有用。

SplashScreenWindow splashScreenWindow = null;
Thread newWindowThread = new Thread(() =>
{
    splashScreenWindow = new SplashScreenWindow();
    splashScreenWindow.Show();
    System.Windows.Threading.Dispatcher.Run();
});
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();

data loading...

_mainWindow.Show();

您调用关闭太早了,请从主窗口Loaded事件中调用splashScreenWindow.Close()。

_mainWindow.Loaded += (s,ev) => { 
splashScreenWindow.Dispatcher.Invoke(new Action(.splashScreenWindow.Close));
};

答案 1 :(得分:1)

因为.Show()不是阻塞调用,这意味着无论窗口实际关闭如何它都将返回,因此该应用程序用完的可能性更大。

使用.ShowDialog()

在调用此功能之前,请确保关闭启动屏幕。