🛡️ 3段例外ガードのどこで止まる?
1. try-catch (OnStartup)
MainWindow の生成や DataContext 設定で落ちた場合、MessageBox で即通知。
2. DispatcherUnhandledException
UIスレッドで拾い損ねた例外を捕捉し、Handled = true にしてアプリを継続。
3. AppDomain.UnhandledException
別スレッドやタスクで発生した致命的エラーを検知して最後のダイアログを出す。
初期化フェーズの例外は try-catch で握りつぶし、スタックトレース付きで知らせます。ViewModel を InitializeComponent より前に生成しているのは、ここで NullReferenceException を拾った過去の反省からです。