web-dev-qa-db-ja.com

WPF GUIアプリケーションを閉じる正しい方法:GetCurrentProcess()。Kill()、Environment.Exit(0)またはthis.Shutdown()

GUIデスクトップベースのWPF 4.0(C#.Net 4.0)プログラムは、SQL Serverデータベースで動作します。アプリケーションを実行するたびに、ADO.NET Entity Frameworkを介してSQL Serverへの接続が作成され、SQL Serverに到達できない場合は例外がスローされ、通知とともにMessageBoxが表示されます。

ユーザーがこのメッセージを読んだ後、アプリケーションがシャットダウンするようになりました。これを行うための3つの方法を見つけました。

_Process.GetCurrentProcess().Kill();
_

または

_this.Shutdown(); // Application.Current.Shutdown()
_

または

_System.Environment.Exit(0);
_

それらはすべて正常に動作し、必要な処理を実行します。Windowsタスクマネージャーでアプリケーションを閉じ、アプリケーションのプロセスを終了します。

私は知りたいです:

  1. それらの違いは何ですか?
  2. どちらの方法でアプリケーションをより早く終了できますか?
  3. アプリケーションを閉じる方法はどれですか?
  4. Application.Current.Shutdown()this.Shutdown()はアプリケーションを閉じるのと同じ方法ですか?

または、WPF GUIアプリケーションを閉じる別の、より適切な方法がありますか?

Application.Exit()は、エラーが表示されるため機能しません。

イベント「_System.Windows.Application.Exit_」は、+ =または-=の左側にのみ表示できます

ありがとう。

49
Mike B.

Application.Current.Shutdown()は、アプリケーションをシャットダウンする適切な方法です。一般的に、処理可能なexitイベントを起動するため more

アプリケーションを強制終了する場合は、Process.GetCurrentProcess().Kill()を使用する必要があります。 詳細

Ad1。これらの方法の性質はまったく異なります。シャットダウンプロセスを一時停止して一部の操作を終了し、強制終了してアプリケーションを強制終了することができます。

Ad2。おそらくKill()が最速の方法ですが、これはカーネルパニックのようなものです。

Ad3。 closeイベントを起動するため、シャットダウンします

Ad4。それはthisが何であるかによります。

Application.Current.Shutdown();を使用します

追加ShutdownMode = "OnMainWindowClose" in App.xaml

2
Dark Knight
private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }
1
David Fawzy

@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
}
1
HotN