我以爲先登陸後啓動應用主程序是一個很經典的問題,基本上若是要寫一個應用程序都會用到這個的小環節。我在這個問題上掙扎了大半天才找到解決方案,個人實現方法我以爲有點不正宗,若是有哪位高手知道更好的方法歡迎留言指導!!html
首先來講一下傳統C#在WinForm中的實現方法,基本上是在Main函數中根據第一個啓動窗口的DialogResult來判斷是否實例第二個窗口,DialogResult是在第一個窗口中根據登陸狀況來設置的。代碼以下app
第一個登陸窗口中設置DialogResult的代碼:ide
this.DialogResult = DialogResult.OK;函數
this.Close();this
From: http://www.itc8.cn/a/bianchengleyuan/2011/0126/216.htmlspa
參考WinFrom中的這個基本想法,在WPF中實現。我重寫了OnStartup函數:.net
死活都是隻能啓動第一個窗口登陸,而後第二個窗口沒法呈現出來。調試後發現main窗口已經實例化了可是ShowDialog()貌似徹底不起做用。糾結了。。調試
這個問題的可能緣由有:orm
1. MainWindow也就是我要建立的第二個主窗口沒有實例化成功;htm
2. DialogResult錯誤致使沒有進入MainWindow的實例和顯示過程;
3. 第一個窗口在做祟。
通過調試排除第1、二中可能,那麼確定就是第一個窗口設置不對或者哪裏出問題了。Google了一下別人WPF的方法,發現有一篇文章中提到了須要將WPF的ShutDownMode設置爲OnExplicitShutdown才行,試了一下,果真生效了!只須要很簡單的在Main主函數修改Application的ShutdownMode,修改代碼以下
讓咱們來看看這個ShutdownMode是何方神聖。ShutdownMode能夠設置爲一個ShutdownMode 枚舉值,包括三種:OnLastWindowClose、OnMainWindowClose、OnExplicitShutdown,默認值是OnLastWindowClose。若是將 ShutdownMode 設置爲 OnLastWindowClose,則 Windows Presentation Foundation (WPF) 會在應用程序中的最後一個窗口關閉時隱式調用 Shutdown,即便任何當前已經實例化的窗口被設置爲主窗口也是如此(MSDN: http://goo.gl/fAyrD )。最後一句是關鍵:即便任何當前已經實例化的窗口被設置爲主窗口也是如此。由於WPF中默認將在Application中實例化的第一個 Window 對象的引用自動設置爲MainWindow。
也就是說當咱們實例化第一個窗口的時候,它被認爲是一個MainWindow,因此當它被關閉的時侯WPF就已經隱式調用了ShutDown因此以後咱們在怎麼實例化窗口都是徒勞。這就是爲何把ShutdownMode設爲顯示關閉這樣就能夠避免上面的問題了。須要注意的是在OnStartUp中記得調用App.Shutdown()來關閉Application哦