◆ 例外が出る可能性あるなら デストラクタ内で catch するように

一番外側で try catch していて unhandled な例外がでることはないはずだったのに unhandled 慣れ以外は色々ログられていました

調べてみると例外は デストラクタで呼び出していた Dispose の中でした

↓のコードは catch されずに unhandled な例外となり落ちます
public partial class Window01 : Window
{
    public Window01()
    {
        try
        {
            var a = new A();
        }
        catch (Exception ex)
        {
            Console.WriteLine("catch exception");
        }
    }

    public class A
    {
        ~A()
        {
            throw new Exception("error in destructor");
        }
    }
}

C# はデストラクタの処理を別のスレッドで行ってるそうです
デストラクタで投げられる例外は Window01 の try の中での例外じゃないので catch されないというわけです

COM とか稀によくわからない例外が出るところだと安全のためにデストラクタ内で try catch 書いておいたほうがいいかもしれませんね