2010-04-04 8 views
2

Je gère toutes mes exceptions non gérées dans le code mais chaque fois qu'il se produit (pas pendant le débogage) j'obtiens ma fenêtre d'erreur et dès qu'il se ferme "Une exception d'application non gérée est apparue dans votre application". Comment puis-je le supprimer?Supprimer la boîte de dialogue d'exception non gérée

PS: Je n'utilise pas ASP.NET, j'utilise Windows Forms

+0

Je suppose que vous faites une demande de gain? – Nix

+0

Vous le supprimez en corrigeant le code qui lance des exceptions jusqu'au niveau supérieur. –

+0

je pourrais ne pas remarquer certains –

Répondre

4

Vous ne pouvez pas supprimer AppDomain.UnhandledException. Quelque chose de vraiment méchant s'est produit, un fil de votre programme est mort d'une crise cardiaque. Les probabilités que le programme continue de fonctionner de manière significative sont zéro, .NET met un terme à la misère en mettant fin au programme.

Ecrivez un gestionnaire d'événements pour l'événement AppDomain.CurrentDomain.UnhandledException et consignez ou affichez la valeur de e.ExceptionObject.ToString() afin de connaître l'origine de l'incident. Cela vous donne un indice sur la façon de réparer votre code. Le cas échéant, il se peut que ce soit quelque chose que vous ne pouvez pas réparer vous-même. Une sorte de dysfonctionnement du serveur de base de données par exemple. Faire quelque chose pour cacher intentionnellement l'erreur est donc une très mauvaise idée. Le personnel de support de votre client n'aura aucune idée de ce qu'il doit faire.

0

J'utilise une protection d'exception.

Windows App Example

Celui-ci montre l'utilisation des services

Exception Shielding

Sa partie de la bibliothèque enteprise, et vous permet de filtrer les exceptions ainsi que remap eux, pour cacher les détails.

0

Pour Windows Forms, vous pouvez envoyer des exceptions non gérée (qui ferait par ailleurs la fenêtre d'exception non gérée pour faire apparaître) à votre gestionnaire d'exception en ajoutant ce qui suit dans la méthode Main(), avant que la méthode Application.Run() est appelée:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

Vous pouvez vous abonner votre gestionnaire à l'événement d'exception non gérée en ajoutant ce qui suit au constructeur ou ailleurs du formulaire:

Application.ThreadException += myHandler; 

et la méthode de gestionnaire de votre forme ressemblerait à ceci :

void myHandler(object sender, System.Threading.ThreadExceptionEventArgs e) 
{ 
    //do something 
} 

Vous pouvez trouver plus d'informations à ce sujet sur le msdn.

0

est ici une solution pour montrer toutes les exceptions non gérées, les deux types gérés et non gérés:

static void Main() { 
    try { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
     Application.ThreadException += 
      new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 
     Application.Run(new Form1()); 
    } 
    catch (Exception ex) { 
     MessageBox.Show("A fatal error has occurred. Please contact your admin\n" + 
         "Exception type: " + ex.GetType() + "\n" + 
         "Exception Message: " + ex.Message + "\n" + 
         ex.StackTrace, "Fatal Exception"); 
     if (ex.InnerException != null) { 
      MessageBox.Show("Inner Exception:\n" + 
          "Exception type: " + ex.InnerException.GetType() + "\n" + 
          "Exception Message: " + ex.InnerException.Message + "\n" + 
          ex.StackTrace, "Fatal Exception (inner)"); 
     } 
    } 
} 

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { 
    throw new Exception(e.Exception.Message, e.Exception); 
} 

Pour tester cela, j'ai utilisé C++/CLI pour lancer une exception non gérée. Ceux-ci ne seront pas interceptés correctement à moins que le gestionnaire Application_ThreadException ci-dessus ne soit présent.

Questions connexes