2017-12-04 11 views
2

最初のウィンドウが閉じた後にWPFアプリケーションが終了する不思議なバグが発生しました。これにより、私はそれを引き起こしているものが好奇心をそらしていました。WPFアプリケーションを閉じる原因

たとえば、これは私が習得できなかったバージョンです。 EULAWindowを閉じると、アプリケーションがシャットダウンします。

EULAWindow eula = new EULAWindow(); 
eula.ShowDialog(); 
MainMenuWindow mainWindow = new MainMenuWindow(); 
mainWindow.ShowDialog(); 

EULAを開き、メニューウィンドウを開くと思っていました。私はコードを並べ替えると、期待どおりに動作することに気づきました。

例えば、これはそれを修正します:

EULAWindow eula = new EULAWindow(); 
MainMenuWindow mainWindow = new MainMenuWindow(); 
eula.ShowDialog(); 
mainWindow.ShowDialog(); 

これは、実際にアプリケーションが第1の状況でシャットダウンする原因となっているの質問に私をもたらしますか?

+0

おそらく未処理の例外です。あなたはどんな種類のエラーメッセージを受け取っていますか? –

+0

私は未処理の例外をキャッチします。通常のAppクローズのように、エラーがなく、ProcessExitイベントをトリガーしません。 –

+0

2番目のコード例を使用できないことがありますか? –

答えて

3

ShowDialog()はブロッキング呼び出しです。だから、最初のケースでは、単一のウィンドウを持って、その後、それを表示し、ユーザーにそれを閉じることができます。最後のUIウィンドウが閉じられたら、アプリは何をすべきですか?たぶん、アプリケーションのシャットダウンコードに従ってください?私はそう思う。

2番目のケースでは、ShowDialog()内でブロックする前に2つのウィンドウを作成します。したがって、最初のウィンドウを閉じると、ユーザーを収容できる別のウィンドウがあり、アプリケーションがシャットダウンしていない場合、次のウィンドウが表示されるのを待つだけです。

+0

私はあなたが言っていることを理解していると思いますが、あなたの第2段落はもっとはっきりしています。 –

+0

@RobertHarvey、そうです。詳細が追加されました。 –

+0

ああ、それは良いです。 –

0

私は私のウィンドウを作成するアプリケーションの起動を使用していたので、それは次にをShutdownMode.OnMainWindowCloseとしてCurrent.ShutDownModeを維持Current.MainWindowEULAWindowを設定不履行ました。

次の2つのウィンドウを作成すると、表示またはShowDialogのを呼び出す前に、それはに自動的にシャットダウン・モードを変更するには、私は方法や場所、この出来事かどうか分からないが、私はこれは言うことができ

をShutdownMode.OnLastWindowCloseさらなる調査で起こっている行動。

関連する問題