2012-09-27 48 views
1

我正在開發一個WPF,C#應用程序。動畫將不會啓動,直到onStartup完成

由於加載過程非常長,我們需要創建一個動畫啓動畫面,以在應用程序加載時顯示。

問題是所有的初始化代碼都在「OnStartup」方法中。 我注意到動畫在OnStartup完成之前不會啓動,所以我猜想你在應用程序啓動結束之前不能顯示任何動畫。

我對這個假設是否正確?如果是,有沒有辦法在啓動完成之前顯示動畫,還是應該將代碼移到另一個地方? (我不喜歡這樣做,因爲這將是應用程序流程的巨大變化)。

編輯

我試圖用一個新的線程,並使用調度啓動飛濺,但調度程序的調用沒有啓動,直到OnStartup已完成。

+0

是否在單獨的線程中完成「加載過程」? –

回答

4

你應該這樣做:

protected override void OnStartup(StartupEventArgs e) 
{ 
    //Start your animation here. 

    Task.Factory.StartNew(() => 
    { 
     //Start long loading operation here 

     Application.Current.Dispatcher.Invoke(
      new Action(() => 
      { 
       //Stop your animation here 
       //Note: it needs to run on the UI thread, so we dispatch it. 
      }) 
     ); 
    } 
} 
+0

我試過了,問題是調度器.voke也不會啓動,直到OnStartup完成。 – user844541

+1

OnStartup在到達Task.Factory.StartNew後應該立即返回,因爲它在單獨的線程中運行。 –

+0

,但啓動屏幕應該在onstartup正在運行時顯示。所有沉重的邏輯是在OnStartup – user844541

1

創建動畫的新窗口。首先啓動這個窗口,當它開始創建主窗口並關閉第一個窗口時,您可以將動畫窗口設置爲「始終位於頂部」以防止主窗口覆蓋動畫。

相關問題