2008-12-02 51 views
5

加載WPF窗口,我發現了一些很奇怪的行爲...問題System.ExecutionEngineException而從Windows窗體

這裏是如何複製的問題:

  1. 創建一個WPF應用程序項目。
  2. 從App.xaml文件中刪除StartupUri。
  3. 添加啓動事件處理程序與應用程序簽名「private void Application_Startup(object sender, StartupEventArgs e)
  4. 現在,一個表單添加到項目中(點擊右鍵,選擇添加新項)。
  5. 在Application_Startup方法
  6. ,創建窗體對象,並顯示它像Form1 f1 = new Form1(); f1.ShowDialog();
  7. 實際Form1上,添加一個按鈕的設計,並添加一個click事件處理程序的按鈕。
  8. 爲您的項目Window1添加一個新的WPF窗口。
  9. 在步驟6,創建Form1的按鈕單擊事件處理程序中添加幾行代碼來創建顯示WPF窗口:Window1 w1 = new Window1(); w1.Show();
  10. 運行該項目,並單擊WinForm的按鈕顯示WPF窗口...作品罰款到目前爲止。
    1. 關閉WPF窗口並再次單擊winform的按鈕。這一次你應該得到例外。

所以,基本上我要做的就是創建一個顯示一個WinForm一個WPF應用程序。然後,winform顯示一個WPF窗口。

第一次顯示WPF窗口時,一切正常。如果它關閉,然後重新打開,我會得到異常!我也可以通過多次點擊按鈕打開多個WPF窗口。但是,一旦最後一個關閉,我再也無法打開另一個,沒有例外...

我也嘗試過在http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/442782b1-00a1-4e2e-9cc6-ae99b6699126/上建議的各種提示,但這些都沒有幫助。

這是怎麼發生的?

回答

10

默認的Wpf應用程序關閉行爲(在VS的項目屬性的「應用程序」選項卡上指定,或在Application.Xaml中使用ShutdownMode屬性指定)爲「在最後一個窗口關閉」。這意味着當你關閉你創建的Wpf窗口時,Wpf會關閉應用程序框架,這樣任何後續的窗口創建都會拋出異常。

通過將關機模式設置爲「On explicit shutdown」(Xaml中的「OnExplicitShutdown」),可以避免此問題。然後,當您希望應用程序終止時(例如,當winforms表單關閉時),您需要手動調用Application.Current.Shutdown。

+1

+1。如果你正在結束這個過程(例如winform),你還需要調用Application.Current.Shutdown()嗎?如果是的話,如果你不這樣做會發生什麼? – 2012-10-11 11:42:42