2011-06-19 37 views
3

在我的WPF應用程序啓動時,我必須加載一些數據。這可能需要幾秒鐘,所以我構建了一個帶有文本進度文本和一個欄的啓動畫面。屏幕是由它自己的線程中運行:帶自己線程的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

編輯:我必須更精確地陳述: 我的啓動畫面沒有相同的任務欄按鈕。事實上,它根本沒有按鈕。我已經上傳了一個基本項目來演示發生了什麼: MyApp.zip

是否有可能給啓動畫面提供與主窗口相同的任務欄按鈕?

+2

爲什麼不在後臺線程上加載數據,而不是在單獨的線程上顯示啓動畫面? –

+0

不幸的是,這不是選項,因爲數據決定了GUI的一部分。 – Norbert

+0

你是什麼意思'綁定'? –

回答

0

我會建議不給飛濺窗口任何任務欄按鈕。當您的應用程序被激活(事件Application.Current.Activated)時,您可以這樣做: 1)使飛濺窗口可見 2)使飛濺窗口最上面(臨時) 3)等待一小段時間(幾毫秒) 4)使飛濺窗口非最高 這將使飛濺窗口在激活時在所有其他窗口之前彈出。

當您的應用程序被取消激活(事件Application.Current.Deactivated或Application.Curent.Exit)時,使飛濺窗口隱藏。

我認爲應該給你你正在尋找的行爲。