OSDN Git Service

Task内での未ハンドル例外に対してもエラーログの出力が行われるように修正
authorKimura Youichi <kim.upsilon@bucyou.net>
Fri, 18 Oct 2013 20:47:39 +0000 (05:47 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Fri, 18 Oct 2013 20:43:20 +0000 (05:43 +0900)
OpenTween/ApplicationEvents.cs

index cdadecd..7d47b78 100644 (file)
@@ -30,6 +30,7 @@ using System.IO;
 using System.Diagnostics;
 using System.Windows.Forms;
 using System.Threading;
+using System.Threading.Tasks;
 using System.Globalization;
 using System.Reflection;
 
@@ -58,7 +59,13 @@ namespace OpenTween
                     return 1;
                 }
 
-                Application.ThreadException += MyApplication_UnhandledException;
+                TaskScheduler.UnobservedTaskException += (s, e) =>
+                {
+                    e.SetObserved();
+                    OnUnhandledException(e.Exception.Flatten());
+                };
+                Application.ThreadException += (s, e) => OnUnhandledException(e.Exception);
+                AppDomain.CurrentDomain.UnhandledException += (s, e) => OnUnhandledException((Exception)e.ExceptionObject);
 
                 Application.EnableVisualStyles();
                 Application.SetCompatibleTextRenderingDefault(false);
@@ -91,16 +98,11 @@ namespace OpenTween
             }
         }
 
-        private static void MyApplication_UnhandledException(object sender, ThreadExceptionEventArgs e)
+        private static void OnUnhandledException(Exception ex)
         {
-            //GDI+のエラー原因を特定したい
-            if (e.Exception.Message != "A generic error occurred in GDI+." &&
-               e.Exception.Message != "GDI+ で汎用エラーが発生しました。")
+            if (MyCommon.ExceptionOut(ex))
             {
-                if (MyCommon.ExceptionOut(e.Exception))
-                {
-                    Application.Exit();
-                }
+                Application.Exit();
             }
         }