Existe-t-il un événement global dans les formulaires .NET Windows Forms et les applications WPF, équivalent à On_Error dans ASP.NET - Global.aspx?En cas d'erreur pour l'application Windows
Répondre
Application.ThreadException
Cet événement est déclenché lorsqu'une exception non gérée se produit.
Je m'abonne pour la plupart à cet événement, et, dans eventhandler, j'enregistre l'exception qui s'est produite, ou affiche un MessageBox qui affiche que quelque chose s'est mal passé.
Comme mentionné par d'autres, vous pouvez utiliser Application.ThreadException
Pour les utilisateurs d'exception Manipulation conviviale, vérifier link.
[STAThread] static void Main() {
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e) {
throw new Exception("Whoops");
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) {
MessageBox.Show(e.Exception.Message);
}
J'utilise wpf alors comment obtenir principal() –
oui. Mais, dans la question que vous avez mentionnée sous forme de fenêtres. –
désolé je pense que ce serait pareil pour les deux ... je suis nouveau à WPF ... a découvert qu'il n'y a pas de main(). maintenant après googling je dois savoir comment ajouter un principal() mais obtenir une erreur becoz j'ai aussi un fichier de ressources –
Il existe essentiellement deux options pour piéger les exceptions non gérées au niveau mondial:
Application.ThreadException
pourWindows.Forms
(comme déjà souligné par d'autres)AppDomain.CurrentDomain.UnhandledException
L'exemple suivant montre de programme comment utiliser l'événement UnhandledException
en C#:
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = (Exception)e.ExceptionObject;
Console.WriteLine("Unhandled exception!!");
Console.WriteLine(ex.InnerException.Message);
}
}
En plus de Application.ThreadException, vous devez gérer AppDomain.CurrentDoman.UnhandledException. L'extrait pertinent d'un de mes fichiers Program.cs ressemble à ceci:
Application.ThreadException += new ThreadExceptionEventHandler(AppExceptionHandler.Application_ThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppExceptionHandler.CurrentDomain_UnhandledException);
Edité pour ajouter: Voici un good article qui explique plus loin.
Pour les deux ASP.NET et des applications WinForms, il y a l'événement AppDomain UnhandledException:
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException
Dans ce gestionnaire, vous pouvez effectuer une journalisation nécessaire personnalisée/récupération:
Private Sub UnhandledException(ByVal sender As Object, ByVal e As System.UnhandledExceptionEventArgs)
Console.WriteLine(vbCrLf & "Unhandled exception:" & vbCrLf & e.ExceptionObject.ToString)
End Sub
S'il vous plaît noter que vous êtes pas en attrapant ou en gérant l'exception dans ce cas: vous recevez uniquement un événement de notification. À moins que vous ne terminiez l'application dans votre gestionnaire d'événements, l'exception sera propagée au gestionnaire d'erreurs de niveau supérieur, qui pour les applications WinForms sera généralement dans le système d'exploitation, conduisant à la fenêtre contextuelle «Cette application a ...».
- 1. URL Modification en cas de configuration pour plusieurs langues
- 2. post_max_size et upload_max_filesize au cas par cas
- 3. Expression régulière pour réduire un cas
- 4. Bash globbing - autoexpand pour quelques cas spécifiques?
- 5. Cas d'utilisation pour les propriétés flexibles
- 6. Meilleur cas pour le tri à bulles
- 7. Un moyen de supprimer l'icône de notification en cas d'accident?
- 8. ASP.net ListView Contrôles d'accès en cas ItemUpdating
- 9. Colonnes dynamiques en cas de pivotement
- 10. jQuery chaque() et "en cas de succès"?
- 11. WCF juste pour tous les cas?
- 12. Exception en cas de non-conclusion
- 13. DBUnit: comment actualiser uniquement en cas d'échec?
- 14. bon cas pour Tell, Do not Ask
- 15. jquery exécuter la fonction en tout cas
- 16. en utilisant le cas dans LINQ
- 17. Télécharger sur ftp en cas de changement
- 18. rétroaction automatique en cas d'erreur JavaScript
- 19. requête SQL en cas d'erreur Oracle donnant
- 20. C# interrupteur: cas ne relevant pas dans d'autres cas Limitation
- 21. Système de fichiers en mémoire pour Windows
- 22. Zoom pour un formulaire Windows en C#
- 23. Service Windows pour Windows Mobile
- 24. SQL Cas avec conditions
- 25. Chaîne de cas Sensibilité
- 26. Cas d'utilisation - Aide
- 27. Arrêt d'un test Web en cas d'échec d'une règle d'extraction
- 28. Serait-ce un bon cas pour le polymorphisme
- 29. Delphi: demander l'élévation UAC en cas de besoin
- 30. Utilisez le code RJS en cas onclick d'un bouton
Merci André. Il existe donc un moyen de tracer une exception au niveau de l'application dans C#. –