Gibt es ein globales Ereignis in .NET Windows Forms und WPF-Anwendungen, äquivalent zu On_Error in ASP.NET - Global.aspx?Bei Fehler für Windows-Anwendung
Antwort
Application.ThreadException
Dieses Ereignis wird immer dann ausgelöst, wenn eine nicht behandelte Ausnahme auftritt.
Ich abonniere meistens dieses Ereignis, und im Eventhandler protokolliere ich die aufgetretene Exception oder zeige eine MessageBox an, die anzeigt, dass etwas schief gelaufen ist.
Wie bereits von anderen erwähnt, können Sie Application.ThreadException
Für benutzerfreundliche Ausnahmebehandlung verwenden, lesen Sie in diesem 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);
}
ich benutze wpf so wie main() –
ja bekommen. Aber, in der Frage, die Sie als Windows-Formulare erwähnten. –
Entschuldigung, obwohl es für beide gleich wäre ... ich bin neu bei WPF ... entdeckte, dass es kein main() gibt. jetzt nach dem googeln habe ich gelernt, wie man einen main() hinzufügt, aber fehler bekommen becoz ich habe auch eine ressourcendatei –
Es gibt grundsätzlich zwei Möglichkeiten zu stoppen nicht behandelte Ausnahmen global:
Application.ThreadException
fürWindows.Forms
(wie schon von anderen darauf hingewiesen wird)AppDomain.CurrentDomain.UnhandledException
Das folgende Beispielprogramm zeigt wie man das Ereignis UnhandledException
in C# verwendet:
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);
}
}
Zusätzlich zu Application.ThreadException sollten Sie AppDomain.CurrentDoman.UnhandledException behandeln. Der entsprechende Ausschnitt aus einem meiner Program.cs Dateien sieht wie folgt aus:
Application.ThreadException += new ThreadExceptionEventHandler(AppExceptionHandler.Application_ThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppExceptionHandler.CurrentDomain_UnhandledException);
Edited hinzufügen: Hier ist eine good article, die weiter erklärt.
Für beide ASP.NET und WinForms-Anwendungen, da das Ereignis AppDomain UnhandledException ist:
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException
In diesem Handler können Sie jede benutzerdefinierte Protokollierung/Wiederherstellung erforderlich ausführen:
Private Sub UnhandledException(ByVal sender As Object, ByVal e As System.UnhandledExceptionEventArgs)
Console.WriteLine(vbCrLf & "Unhandled exception:" & vbCrLf & e.ExceptionObject.ToString)
End Sub
Bitte beachten dass Sie sind, nicht die Ausnahme in diesem Fall abfangen oder behandeln: Sie erhalten nur ein Benachrichtigungsereignis. Wenn Sie die Anwendung in Ihrem Event-Handler nicht beenden, wird die Exception an den übergeordneten Fehlerhandler weitergegeben, der sich normalerweise für WinForms-Apps im Betriebssystem befindet und zum bekannten Absturzdialog "Diese Anwendung hat ..." führt.
- 1. Eigener Fehler bei der Installation für OpenCV3
- 2. Fehler bei
- 3. Fehler: Fehler bei der Ausführung für die Task ': Handy: prepareComAndroidSupportAnimatedVectorDrawable2340Library'
- 4. Fehler: Fehler bei der Ausführung für die Task ‚: App: processDebugResources‘
- 5. Fehler: Fehler bei der Ausführung für die Task ': speakup: transformClassesWithMultidexlistForDebug'
- 6. Fehler: Fehler bei der Ausführung für die Task ‚: App: shrinkReleaseMultiDexComponents‘
- 7. Fehler: Fehler bei der Ausführung für die Task ‚: App: transformClassesWithMultidexlistForDebugAndroidTest‘
- 8. Fehler: Fehler bei der Ausführung für die Task ': App: transformClassesWithDexForDebug'
- 9. Javascript Fehler bei $ find für CollapsiblePanelExtender Steuerelement für MasterPage-Szenario
- 10. Fehler bei .doLoadActions
- 11. NHibernate Fehler bei Sitzung.Speichern
- 12. Unserialize-Fehler bei @runInSeparateProcess
- 13. Segmentaion Fehler bei Speicherzuweisung
- 14. Fehler bei Multi wählen
- 15. StackOverFlow Fehler bei Klassen
- 16. Fehler bei FETCH NEXT-
- 17. Fehler bei der Stapelimplementierung
- 18. Fehler bei der Währungsumrechnung bei mehrzeiligen Transaktionen
- 19. Fehler bei impliziter Auflösung?
- 20. C# Bei Fehler resume
- 21. Fehler bei der Deklaration
- 22. Fehler bei Wort. SCARD_READERSTATE
- 23. Fehler bei Azure-Projekt
- 24. Fehler bei genymotion power_supply
- 25. Fehler bei Genehmigungsverfahren
- 26. Fehler bei der Datenbankverbindung
- 27. Fehler bei curl_setopt()
- 28. Fehler bei Gridview Anwendung
- 29. Fehler bei Gehöft bis
- 30. Fehler bei EPPlus
Dank Andre. So gibt es eine Möglichkeit, eine Ausnahme auf Anwendungsebene in C# zu verfolgen. –