c# notepad




プログラムでWPFアプリケーションを終了するにはどうすればよいですか? (11)

私はC#(Windowsフォーム)を使用してきた数年のうちに、WPFを使用したことはありません。 しかし、今はWPFが大好きですが、ユーザーが[ファイル]メニューの[終了]メニュー項目をクリックしたときに、アプリケーションを終了する方法がわかりません。

私が試してみました:

this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();

他の多くの中で。 何も動作しません。


xamlコードから、あらかじめ定義されたSystemCommandを呼び出すことができます:

Command="SystemCommands.MinimizeWindowCommand"

私はこれが好ましい方法であるべきだと思う...


wuminqiが言ったようにApplication.Current.Shutdown(); 元に戻すことは不可能であり、通常、ユーザーがWindowsからログオフしたりシャットダウンしたりするときにアプリケーションを強制的に終了させるために使用されると考えられます。

代わりに、メインウィンドウでthis.close()を呼び出します。 これは、 Alt + F4またはウィンドウの閉じる[x]ボタンを押すのと同じです。 これにより、他のすべての所有ウィンドウが閉じられ、 Application.Current.Shutdown();呼び出されApplication.Current.Shutdown(); クローズアクションがキャンセルされていない限り。 ウィンドウのクローズに関するMSDNのドキュメントを参照してください。

また、 this.close()はキャンセル可能であるため、closingイベントハンドラに変更の保存確認ダイアログを入れることができます。 <Window Closing="...">イベントハンドラを作成し、それに応じてe.Cancelを変更するe.Cancelです。 (これを行う方法の詳細については、 MSDNのドキュメントを参照してください)。


Application.ShutDown();は存在してはいけませんApplication.ShutDown(); または.Exit()メッセージです。

Applicationは静的クラスです。 現在のアプリケーションを参照していません。 あなたは現在のアプリケーションにアクセスし、次にこのようにシャットダウンする必要があります:

Application.Current.Shutdown();

this.Close()ファイルのthis.Close()メソッドを使用してウィンドウを閉じることができます。

または、 App.Current.Shutdown()ファイルのApp.Current.Shutdown()メソッドを使用してウィンドウを閉じます。


あなたがこれを行うことができる別の方法:

System.Diagnostics.Process.GetCurrentProcess().Kill();

これは、処理中のアプリケーションを強制終了させ、常にマルチスレッドアプリケーションで動作します。

注:別のスレッドのファイルにデータを保存しているアプリケーションを気にしてください。



キャリバーンマイクロフレーバー

public class CloseAppResult : CancelResult
{
    public override void Execute(CoroutineExecutionContext context)
    {
        Application.Current.Shutdown();
        base.Execute(context);
    }
}

public class CancelResult : Result
{
    public override void Execute(CoroutineExecutionContext context)
    {
        OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
    }
}

必要に応じて次のいずれかを使用します。

1。

 App.Current.Shutdown();
OR
 Application.Current.Shutdown();

2。

 App.Current.MainWindow.Close();
OR
 Application.Current.MainWindow.Close();

上記のすべてのメソッドは、 Windowクラスのclosing eventを呼び出し、実行はある時点で停止することがあります(通常、アプリケーションはウィンドウが完全に閉じられる前に ' 本当 ですか?'または ' 閉じる前にデータを保存しますか?

しかし、あなたはすぐに警告なしでアプリケーションを終了したい場合。 以下に使用する

   Environment.Exit(0);

私の理解によると、 Application.Current.Shutdown()も欠点があります。

ユーザーが終了時に確認するための確認ウィンドウを表示する場合は、 Application.Current.Shutdown()は元に戻せません。


試す

App.Current.Shutdown();

私のために

Application.Current.Shutdown(); 

うまくいかなかった。


private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
   System.Windows.Application.Current.MainWindow.Close();
}

//Override the onClose method in the Application Main window

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    MessageBoxResult result =   MessageBox.Show("Do you really want to close", "",
                                          MessageBoxButton.OKCancel);
    if (result == MessageBoxResult.Cancel)
    {
       e.Cancel = true;
    }
    base.OnClosing(e);
}




shutdown