Где разместить центральный обработчик ошибок для проекта Windows Forms

В ASP.NET я могу использовать Application_Error в global.asax для обработки любых необработанных ошибок.

Есть ли эквивалент в формах Windows?


person m.edmondson    schedule 14.01.2011    source источник


Ответы (2)


Да, это AppDomain.UnhandledException


using System;
using System.Security.Permissions;

public class Test {

   [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
   public static void Example()
   {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

      try {
         throw new Exception("1");
      } catch (Exception e) {
         Console.WriteLine("Catch clause caught : " + e.Message);
      }

      throw new Exception("2");

      // Output:
      //   Catch clause caught : 1
      //   MyHandler caught : 2
   }

   static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
      Exception e = (Exception) args.ExceptionObject;
      Console.WriteLine("MyHandler caught : " + e.Message);
   }

   public static void Main() {
      Example();
   }
}
person WraithNath    schedule 14.01.2011
comment
Обратите внимание, что если ваше приложение имеет несколько доменов приложений, это событие необходимо будет перехватить для каждого из них. - person Jesse C. Slicer; 14.01.2011

Это зависит от архитектуры вашего приложения. Например, если вы используете архитектуру MVC, она должна быть в вашем контроллере. Если вы знаете шаблон цепочки ответственности [GOF] или если вы предпочитаете большой обработчик всех типов исключений. В противном случае вы должны будете рассказать нам больше о своем приложении.

person Jean-Christophe Fortin    schedule 14.01.2011