2011-03-24 226 views
1

我儘量拖延我App.xaml.ca關閉窗口:如何延遲窗口關閉在WPF

Window splash = new Window(); 
splash.Show(); 

Timer timer = new Timer(callback, null, 2000, Timeout.Infinite); 

private void callback(object stateInfo) 
{ 
    splash.Close(); 
} 

它工作正常,但整個應用程序的shutdowning。這裏做錯了什麼?

+1

爲什麼你想要一個應用程序來關閉前暫停?這違背了Windows中的預期行爲,這意味着這是一個糟糕的設計。它也會讓人覺得你的計劃是滯後的。如果您正在考慮添加一個關閉確認對話框,請參閱Joel Spolsky的UI設計手冊中的本章:http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html(最後,它說「很多人都是受到計算機的威脅) – 2011-03-25 02:05:25

+0

哦,你正在試圖實現一個關閉自己的啓動畫面......你可以編輯你的問題,使其更明顯,可能在第一句話中說明? :)它使得更快地弄清楚你在問什麼。沿着這些線條,您可能還想讓您的應用出現在您的啓動畫面上。讓你的應用程序*啓動*慢慢就會讓用戶感到厭煩。 – 2011-03-25 02:09:21

+0

我將最終編輯它。但是你不能混用Window和App。我試圖關閉一個窗口,而不是應用程序。但是當我關閉窗口時,應用程序也關閉了,我不想要。 – 2011-03-25 13:26:39

回答

1

一定要檢查你的定時器回調是否回到主調度器線程上。如果不是,那麼當您嘗試從另一個線程關閉窗口時,您可能會遇到異常。

使用splash.Dispatcher.CheckAccess()確保您處於正確的線程,如果不是,則使用splash.Dispatcher.BeginInvoke((Action)() => splash.Close()將調用分派到主線程。

退房this page更多

+0

調度工作完美。謝謝。 – 2011-03-25 13:42:08

0

有不同的關閉模式,如果該窗口關閉並且它是最後一次,那麼應用程序將默認關閉。所以你可以看到還有一些窗口,或者你可以通過設置ShutdownMode來滿足你的需求來改變關機行爲。

例如

Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; 
+0

不錯的答案,但它是明智的離開它,而不是改變它。只是實例化你的主菜單窗口,顯示它並隱藏飛濺:) – Machinarius 2011-03-24 21:43:18