我想在新线程中向我的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();
我的问题是我关闭启动画面时程序关闭。
答案 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()
。
在调用此功能之前,请确保关闭启动屏幕。