web-dev-qa-db-ja.com

App.xaml.csからWPFアプリケーションをシャットダウンする

現在、App.xaml.csでコマンドライン引数処理を行うWPFアプリケーションを作成しています(これは、Startupイベントがこれらの引数を取得するための推奨される方法であると思われるために必要です)。私が知っている限りでは、WPFでApplication.Current.Shutdown()またはこの場合(現在のアプリケーションオブジェクト内にあるので)おそらく実行する必要がある引数を、その時点でプログラムを終了したいことに基づいています。また、単にthis.Shutdown()です。

唯一の問題は、これが正しく機能していないように見えることです。 Shutdown()行が実行された後もデバッガーとコードをステップ実行しましたが、アプリケーションがそれほど長く存続しないと予想されていたため、メソッドでエラーが発生しました。また、メインウィンドウ(XAMLのStartupUri属性で宣言)も読み込まれます。

私はそのメソッドのドキュメントを確認しましたが、Application.StartupまたはApplicationです。

それで、その時点でプログラムを終了する正しい方法は何ですか。 e。 StartupオブジェクトのApplicationイベントハンドラー

36
Joey

最初に、StartupUriプロパティをApp.xamlから削除してから、以下を使用します。

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        bool doShutDown = ...;

        if (doShutDown)
        {
            Shutdown(1);
            return;
        }
        else
        {
            this.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
        }
    }
54

MainWindowを含むアプリケーションのapp.xamlからStartupUriを削除する場合は、OnStartupメソッドで次の呼び出しを行う必要があります。そうしないと、MainWindowが閉じてもアプリケーションは終了しません。

this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;

@フランク・シュウィーターマン、これらの線に沿った何かがあなたのコンソールウィンドウの問題であなたを助けるかもしれません。

9
FodderZone