Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

WPFのエラー処理を集約例外ハンドラで解決する

WPFに限らず、例外処理は一ヶ所にまとめましょう。
ASP.NETに「Application_Error」が、Windowsフォームアプリケーションに「Application,ThreadException」があるように、WPFにも「Application.DispatcherUnhandledException」イベントがあります。

ソースコード

MyApp.xaml
<Application
    x:Class="HelloWorld.MyApp"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Startup="MyApp_Startup"
    DispatcherUnhandledException="Application_DispatcherUnhandledException"
/>
MyApp.xaml.cs
using System.Windows;
using System.Windows.Threading;

namespace HelloWorld {
    partial class MyApp {
        public MyApp() {
        }

        private void  MyApp_Startup(object sender, StartupEventArgs e) {
            //Window w = new Window(
            Window w = null;        // 意図的に例外を発生させる
            w.Title = "Hello World";
            w.Show();
        }

        private void Application_DispatcherUnhandledException(
            object sender,
            DispatcherUnhandledExceptionEventArgs e) {

            MessageBox.Show(e.Exception.ToString());
            e.Handled = true;
        }
    }
}

アプリ実行


参考

Application.DispatcherUnhandledException イベント (System.Windows)
アプリケーションによってスローされた例外が処理されないときに発生します。 ...