WPF關閉應用匯總
就本人而言,C#中關閉應用主要有以下途徑:
1.Close():關閉當前窗口,可以在OnClosing和 OnClosed中捕獲消息,在OnClosing的時候,可以取消關閉窗口
2.Application.Current.Shutdown()/App.Current.Shutdown(): 關閉當前程序,如果有其他線程沒有結束,不會關閉
3.Environment.Exit(0):強制退出,即使有其他的線程沒有結束
4.Process類的CloseMainWindow, Kill:Process.CloseMainWindow是GUI程序的最友好結束方式,從名字上就可以看出來它是通過結束主窗體,相當於用戶點擊窗體的關閉按鈕或者按Alt + F4
5.Environment類的FailFast:這是最暴力最徹底最直接的方法,一般不建議使用
現對各方式做簡單的介紹:
Close():如過調用了Close,而在Closing中沒有顯示的取消退出,則系統可以退出,這種情況僅僅是在沒有多余線程,沒有其他窗口啟動的時候,如果有其他窗口同時啟動,則要考慮App.Current.ShutdownMode。
Application.Current.Shutdown()/App.Current.Shutdown():其使用講究最多。
在WPF應用程序的關閉是有ShutdownMode屬性設置,具有3中枚舉類型的值:
1)OnLastWindowClose(默認值)---應用程序最後一個窗體關閉時關閉應用程序
2)OnMainWindowClose---應用程序主窗體關閉時關閉應用程序
3)OnExplicitShutdown---顯示調用關閉
示例如下:
<Application x:Class="TestApplication.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml%22
StartupUri="Window1.xaml"
ShutdownMode="OnMainWindowClose">
</Application>
Environment.Exit(0):Environment.Exit相當於在Main函數中的return指令。不過它不會執行代碼塊的finally塊(如果有的話),但資源清理還是要進行的。它是最常見的退出當前進程的方法之一。在Main函數中我們可以直接return語句便退出了程序。如果不在Main函數內,那麽Environment.Exit方法就可以派上用場。
示例如下:
private void CloseApp() {
CloseSignal();
AppManager.Instance.Close();
Environment.Exit(0);
}
Environment類的FailFast:此方法更速度,它甚至不需要向操作系統返回進程退出代碼(ExitCode),直接結束當前進程並在應用程序事件薄中寫入信息,用於程序出現致命錯誤需要立即停止。
Process.Kill:從名字也可以看出來,直接殺掉,不給喘息喘息機會,Kill方法會直接結束整個進程,不進行常規資源清理(什麽finally塊等……)。Kill本質調用本地API:TerminateProcess函數。
參考:C#各種結束進程的方法詳細介紹?
???????
WPF Application Shutdown Mode
WPF關閉應用匯總