C# WPF的启动屏幕和自己的线程在其他窗口后面被挖掘

C# WPF的启动屏幕和自己的线程在其他窗口后面被挖掘,c#,wpf,multithreading,splash-screen,C#,Wpf,Multithreading,Splash Screen,在我的WPF应用程序开始时,我必须加载一些数据。这可能需要几秒钟的时间,所以我构建了一个带有文本进度文本和一个条的启动屏幕。屏幕由其自己的线程运行: public static class SplashScreen { public static void ShowSplash() { if (_SplashThread == null) { _SplashThread = new Thread(() =>

在我的WPF应用程序开始时,我必须加载一些数据。这可能需要几秒钟的时间,所以我构建了一个带有文本进度文本和一个条的启动屏幕。屏幕由其自己的线程运行:

public static class SplashScreen
{
     public static void ShowSplash()
     {
         if (_SplashThread == null)
         {
             _SplashThread = new Thread(() =>
                          {
                             _Splash = new WISplash();
                             _Splash.Show();
                             _Splash.Closed += (sender1, e1) => _Splash.Dispatcher.InvokeShutdown();
                             System.Windows.Threading.Dispatcher.Run();
                          });
             _SplashThread.SetApartmentState(ApartmentState.STA);
             _SplashThread.IsBackground = true;
             _SplashThread.Start();
         }
     }
}
WISplash
的基类是
Window

编辑:我必须更准确地陈述: 我的启动屏幕没有相同的任务栏按钮。事实上,它根本没有按钮。我上传了一个基本项目来演示正在发生的事情:


有没有可能给启动屏幕提供与主窗口相同的任务栏按钮?

我建议不要给启动窗口任何任务栏按钮。当您的应用程序被激活(使用event Application.Current.activated)时,您可以执行以下操作: 1) 使飞溅窗口可见 2) 使飞溅窗口位于最上方(暂时) 3) 等待一小段时间(几毫秒) 4) 使飞溅窗口不是最上面的 这将使启动窗口在激活时在所有其他窗口之前弹出

当您的应用程序被停用时(使用events Application.Current.deactivated或Application.Curent.Exit),隐藏启动窗口


我想这应该会给你你想要的行为。

与其在一个单独的线程上显示启动,为什么不在后台线程上加载数据呢?遗憾的是,这不是一个选项,因为数据决定了GUI的一部分。什么是
Bind
?如果我在程序图标的任务栏中单击,我想让启动屏幕位于顶部。如果您可以创建一个我们可以下载的最小工作示例(只需在示例主屏幕中填充虚拟数据并使用计时器,这样需要一段时间),那么我们可能可以更好地帮助您。