Application.MainWindow プロパティの自動設定

同じチームの方に教えてもらった仕様

 

Application.MainWindow プロパティ (System.Windows)

 

MainWindow には、AppDomainインスタンス化される最初の Window オブジェクトへの参照が自動的に設定されます。

え、マジかってなった。(常識かもしれないけど。。。)

 

MainWindowに設定しているWindowが、立ち上がるに、いろいろ起動前のチェック処理とかしてるんだけど、そのときに当然エラーや不正を確認した場合はメッセージ出して、アプリケーションを落とす等の処理を入れてるんですが。

そのエラーメッセージってのは、PrismのInteractionRequestでWindow継承したクラスで自作したエラーダイアログ表示してるんだけど、こいつがMainWindowに設定されてしまってこいつが表示されたらすぐに落ちてしまうってことが起こってたらしい。

しかも、同僚の方が実装してた処理はその処理によって、MainWindowの内容が変化するような処理だったから、チェック処理やその実装する処理の前にMainWindowをインスタンス化しても、処理の内容が反映されないからどうしようか。ってなっていたみたい。

以前僕が自分でOnStartupイベントハンドラ内をいじってたときに実装してた起動前のチェック処理は、ダイアログが表示された(エラーと判定された)ら、アプリケーションの起動はせずに落とす処理だったから、気づかなかった。

いや確かに、InteractionRequestでエラーダイアログを連続で2回表示する瞬間があったんだけど、なぜか2回目が表示されなくて、えーーなんでだなんでだってずっと悩んでたんだけど、この仕様を知って合点がいった。。。

 

じゃあ、どうすんのってことになって、結局、チェック処理の前に、一度MainWindowをインスタンス化してMainWindowプロパティを設定して、チェック処理が終わったら

新しくインスタンス化してそいつをMainWindowプロパティに設定し、一度目に設定したMainWindowをクローズさせるというなんともすっきりしない方法でとりあえず。

 

なかなか気持ち悪くて、なにかアプリケーション立ち上がる前に、エラーメッセージとか出す時の正しいやり方を知りたくて家帰ってからも少し調べたけど、結局わからなかったナー

 

常日頃思うけど、サーチ力とデバッグ力と、英語力が足らない。

今回は機械翻訳が割とまともだったから良いけど、日本語になってないの結構あるし英語読めるようにならなきゃなぁ~、とは思いつつもなかなか手がつかない。。。

 

 

今日はこんな感じ。