C# WPFアプリケーションの終了方法あれこれ
終了方法が色々あったのでまとめてみました。
他にも考慮すべき点があった場合は,加筆します。
Shutdown関数 | Application.Current.Shutdown関数 | Environment.Exit関数 | Close関数 | |
Appクラス | Shutdown→後続コード→App.OnExit()→App.Run()直後 | Shutdownと同じ | 即アプリケーション終了 | − |
MainWindowクラス | − | 長いので以下参照 | 即アプリケーション終了(Closing関数なども呼ばれず) | 長いので以下参照 |
MainWindowのApplication.Current.Shutdown関数
OnLastWindowCloseの場合
最後のウィンドウを終了した場合だけ,↓の終了モードの動きをする。
OnMainWindowCloseの場合
メインウィンドウを終了した場合だけ,↓の終了モードの動きをする。
OnExplicitShutdownの場合
とにかく↓の終了モードの動きをする。
終了モードの動作
Application.Current.Shutdown();
↓
後続のコード〜関数終了
↓
App.OnExit()
↓
その後,App.Run()の直後へ移動。
終了モードでない場合
Application.Current.Shutdown();
↓
後続のコード〜関数終了
MainWindowのClose関数
OnLastWindowCloseとOnMainWindowCloseの場合
Application.Current.Shutdownと同様の動作をする。
Closing関数などはコールされる。
OnExplicitShutdown
Application.Current.Shutdownの「終了モードでない場合」の動作をする。
メインウィンドウについて
一番最初に作成されたMainWindowがメインウィンドウとなる。
App.MainWindowプロパティで取得・変更が可能だ。
シャットダウンモードについて
App.ShutdownModeプロパティで変更できる。
参考サイト
How to exit a WPF app programmatically?
http://stackoverflow.com/questions/2820357/how-to-exit-a-wpf-app-programmatically
WPF App Doesn't Shut Down When Closing Main Window
http://stackoverflow.com/questions/9992119/wpf-app-doesnt-shut-down-when-closing-main-window