我们有一个应用程序,显示一个闪屏,其中显示一些数据,所以我们有一个自定义的闪屏。同样由于历史原因,所有的应用程序初始化都发生在UI线程上,所以我的解决方案是在一个单独的STA线程中显示闪屏。
private void ShowSplashScreen()
{
var mainDispatcher = Dispatcher.CurrentDispatcher;
var splashScreenThread = new Thread(() =>
{
new SplashScreen().Show();
_splashScreenThreadDispatcher = Dispatcher.CurrentDispatcher;
Dispatcher.Run();
});
splashScreenThread.SetApartmentState(ApartmentState.STA);
splashScreenThread.Start();
}
private void CloseSplashScreen()
{
_splashScreenThreadDispatcher.InvokeShutdown();
}然后,当初始化完成时,它将运行
var mw = new MainWindow();
Application.Current.MainWindow = mw;
mw.Show();
CloseSplashScreen();
mw.Activate();这工作正常的桌面模式=>主窗口显示,闪屏关闭,主窗口是可见的。然而,当我将窗口切换到平板电脑模式,并从开始屏幕启动应用程序时,当主窗口显示时,它只会闪烁,并再次转到后台,它会显示开始屏幕。如果我不关闭闪光灯,那么所有的东西仍然可见,但这当然不是一个选项。
我已经尝试了各种方法,调用me.Show()、mw.Activate()、me.Focus()的顺序不同,在启动画面的关闭处理程序中设置焦点,但似乎都不起作用。对如何解决这个问题有什么想法吗?在生产中,该应用程序只在平板电脑上使用,因此它是我们的必备功能。
致敬Stan
发布于 2018-02-21 19:01:42
我修复了它使用弹出式窗口,而不是一个窗口的闪屏。弹出窗口不需要所有者或家长,所以可以使用它,并且当弹出窗口关闭时,开始屏幕不会出现在主窗口的前面。
https://stackoverflow.com/questions/48869255
复制相似问题