2008-10-09 4 views
2

J'ai un problème lorsqu'une exception de non-traitement se produit lors du débogage d'un projet WinForm VB.NET.Visual Studio 2008 - L'application se ferme lorsqu'une exception non gérée se produit

Le problème est que ma demande se termine et je dois commencer à nouveau l'application, au lieu de l'action comme une nouvelle tentative a été le cas dans VS2003

L'exception unhandeld est mis en œuvre dans la nouvelle classe My.MyApplication trouvés dans ApplicationEvents .vb

Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException 
    Dim handler As New GlobalErrorHandler() 
    handler.HandleError(e.Exception) 

    e.ExitApplication = False 
End Sub 

note: handler.HandleError montre juste une boîte de dialogue et enregistre l'erreur dans un fichier journal.

J'ai aussi essayé le code suivant celui utilisé pour travailler dans VS2003 mais il en résulte dans le même comportement lorsqu'il est exécuté dans VS2008:

AddHandler System.Windows.Forms.Application.ThreadException, AddressOf OnApplicationErrorHandler 
    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf OnUnhandledExceptionHandler 

OnApplicationErrorHandler et OnUnhandledExceptionHandler fait la même chose que handle.HandleError

Course à pied l'application en dehors de VS2008 entraîne le comportement attendu (l'application ne se termine pas) mais elle augmente notre cycle de test pendant le débogage.

Mise à jour: J'ai ajouté exemple de code dans ma réponse à démontrer ce problème en C#

Répondre

1

Ok j'ai trouvé la réponse à cette question dans ce billet de blog: Handling "Unhandled Exceptions" in .NET 2.0

Merci Mark!

La réponse courte est:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

Cela provoque le même comportement en mode de débogage et exécuter. Résultant dans VS ne se fermant pas pendant le débogage

0

Je ne suis pas sûr de VS2008, mais j'eu le même problème pendant un certain temps dans VS2005. Il s'avère que je devais juste aller à Debug-> Exceptions (ou Crtl + Alt + E) et m'assurer que toutes les boîtes Thrown sont décochées, mais toutes les boîtes non gérées par l'utilisateur sont vérifiées.

Vous pouvez avoir quelque chose de différent et de funky en cours avec le code que vous avez, mais il peut résoudre ce problème.

+0

J'ai essayé ce que vous avez suggéré mais cela n'a pas fonctionné pour moi :( –

1

OK J'ai fait plus de travail à ce sujet mais je n'ai toujours pas de réponse. Je trouve que ce problème est non seulement lié à VB.NET, mais aussi à C#

Voici programme simple C# qui illustre le problème:

using System; 
using System.Windows.Forms; 
namespace TestCSharpUnhandledException 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 
      AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
     } 

     void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
     { 
      MessageBox.Show("Oops an unhandled exception, terminating:" + e.IsTerminating);     
     } 

     void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 
     { 
      MessageBox.Show("Oops an unhandled thread exception"); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      throw new Exception("Dummy unhandled exception"); 
     } 
    } 
} 

Ce que je trouve intéressant est le débogage dans VS le UnhandledException événement est levé mais l'exécution de l'application en dehors de VS provoque le ThreadException à tirer.

Toujours à l'intérieur de VS, la fonction e.IsTermination est définie sur true, ce que je souhaite finalement être faux. (Ceci est une propriété en lecture seule)

Questions connexes