37

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

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

私はそのメソッドのドキュメントをチェックしましたが、そのメソッドを使用してはならない、Application.Startupまたはまったく使用しないことを示すコメントは何も見つかりませんでしたApplication

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

4

3 に答える 3

59

まず、App.xamlからStartupUriプロパティを削除してから、次を使用します。

    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);
        }
    }
于 2009-03-03T11:49:43.050 に答える
9

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

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

@Frank Schwieterman、これらの行に沿った何かがコンソールウィンドウの問題を解決するのに役立つかもしれません.

于 2013-02-15T18:14:46.550 に答える