Question

Je veux obtenir par défaut Windows Forms Unhandled-Exception de dialogue chaque fois que mon C # Les rencontres d'application U-E. En 2005 vs quand j'éteins jit Débogueur app.conf comme ceci:

<configuration>
   <system.windows.forms jitDebugging="false" />
<configuration>

l'application se comporte correctement et montre Windows Forms dialogue par défaut U-E, avec Continuer, Quitter, pile d'appel et tout.

Cependant, en 2008 vs, sur la même machine ou différents, même si je jit je comprends toujours diable par défaut .NET Unhandled-Exception de dialogue, avec débogage, Envoyer un rapport et Ne pas Envoyer des boutons.

Comment puis-je faire mon vs 2008 acte app comme celui que je fais en 2005 vs, pour afficher Windows Forms boîte de dialogue U-E?

S'il vous plaît ne recommande pas d'utiliser

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

juste parce que je ne l'utilise gestionnaire personnalisé dans mon projet vs 2005, pourquoi devrais-je utiliser dans vs 2008? Je veux que ce travail CLR faire.

Toute aide est appréciée

Était-ce utile?

La solution

Vous parlez de différentes fonctions de gestion des exceptions. ThreadExceptionDialog que vous voyez avec le quitter et continuer boutons est déclenché par le événement Application.ThreadException . Il ne semble jamais si l'exception se produit sur le thread d'interface utilisateur, lorsqu'un gestionnaire d'événements qui fonctionne en réponse à un message Windows lance une exception. Toute exception dans un thread de travail sera toutefois bombarder le programme par AppDomain.UnhandledException.

Vous ne pouvez pas gérer ce dernier, le programme est mort et ne peut pas continuer. ThreadExceptionDialog est inutile affiche.

Vous pouvez faire la bombe programme toujours en désactivant l'événement ThreadException en appelant Application.SetUnhandledExceptionMode (). Maintenant, chaque exception non gérée déclenchera AppDomain.UnhandledException et mettre fin au programme. C'est probablement pas ce que vous voulez, mais est le choix judicieux.

Notez également que l'événement ThreadException est désactivé lorsque vous exécutez le programme avec un débogueur. Ce qui est sans doute la raison pour laquelle vous voyez une différence dans VS2008. Il n'y a par ailleurs pas eu de changements.

Autres conseils

Réponse de Hans semble raisonnable Passant. Cependant, même si vous dites que vous ne voulez pas que je recommande toujours un gestionnaire sur AppDomain.CurrentDomain.UnhandledException pour vous assurer que vous déterminez ce qui se passe lorsque votre application se bloque de façon inattendue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top