WPF GUIアプリケーションを閉じる正しい方法:getCurrentProcess()。kill()、Environment.exit(0)またはthis.shutdown()
-
28-09-2019 - |
質問
GUIデスクトップベースのWPF 4.0(C#.NET 4.0)プログラムは、SQL Serverデータベースで動作します。アプリケーションを実行するたびに、ADO.NETエンティティフレームワークを介してSQL Serverへの接続を作成し、SQL Serverが到達できない場合、例外をスローして表示します MessageBox
通知付き。
これで、ユーザーがこのメッセージアプリケーションを読んだ後にシャットダウンすることを望んでいます。私はこれを行うための3つの方法を見つけました:
Process.GetCurrentProcess().Kill();
また
this.Shutdown(); // Application.Current.Shutdown()
また
System.Environment.Exit(0);
それらはすべて正常に動作し、必要なことを行います。アプリケーションを閉じて、Windowsタスクマネージャーでアプリケーションのプロセスを殺します。
私は知りたいです:
- それらの違いは何ですか?
- どちらの方法でアプリケーションをより速く閉じますか?
- アプリケーションを閉じるためのどの方法を使用する必要がありますか?
- は
Application.Current.Shutdown()
とthis.Shutdown()
アプリケーションを閉じるのと同じ方法ですか?
それとも、WPF GUIアプリケーションを閉じるための別の、より適切な方法がありますか?
Application.Exit()
エラーが発生しているので、私のためには機能しません:
行事 '
System.Windows.Application.Exit
' +=または - =の左側にのみ表示できます
ありがとう。
解決
Application.Current.Shutdown()
アプリケーションをシャットダウンする適切な方法です。一般的にあなたが処理できる出口イベントを発射するため もっと
Process.GetCurrentProcess().Kill()
アプリケーションを殺すときは使用する必要があります。 もっと
AD1。これらの方法の性質はまったく異なります。シャットダウンプロセスを一時停止して、一部の操作を終了し、アプリケーションを強制的に閉じることができます。
AD2。おそらく Kill()
最速の方法になりますが、これはカーネルパニックのようなものです。
AD3。閉鎖は、緊密なイベントを発射するためにシャットダウンします
AD4。それは何に依存します this
は。
他のヒント
使用する application.current.shutdown();
追加 shutdownmode = "onmainwindowclose" の app.xaml
private void ExitMenu_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
@DamianLeszczyński-Vashの答えは、あなたが尋ねた4つの具体的な質問をほぼカバーしています。あなたの最後の質問のために Application.Exit()
, 、それはあなたが呼び出すことができる方法ではなく、あなたが購読できるイベントです。このように使用する必要があります。
Application.Current.Exit += CurrentOnExit;
//this.Exit += CurrentOnExit; would also work if you're in your main application class
...
private void CurrentOnExit(object sender, ExitEventArgs exitEventArgs)
{
//do some final stuff here before the app shuts down
}