Где разместить центральный обработчик ошибок для проекта Windows Forms - PullRequest
4 голосов
/ 14 января 2011

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

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

Ответы [ 3 ]

2 голосов
/ 14 января 2011

Да, его 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();
   }
}
1 голос
/ 14 января 2011
[STAThread]
static void Main()
{
  Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
  Application.Run(new FrmMain());
}

private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
  MessageBox.Show("Unhandled exception: "+e.Exception.ToString());
}
0 голосов
/ 14 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...