2016-07-05 6 views
-4

Ich möchte ein Formular in meiner Windows Application Solution schreiben, das jedes Mal auftaucht, wenn eine Ausnahme ausgelöst wird. Anstatt diese hässliche Fehlerseite anzuzeigen, möchte ich dem Nutzer eine von mir definierte Seite zeigen. Wie könnte ich darüber gehen?Wie schreibe ich ein Formular, das alle Fehler abfängt?

Vielen Dank für Ihre Antwort im Voraus.

+0

Ich konnte nichts finden. – user6553558

+0

Werfen Sie einen Blick hier https://msdn.microsoft.com/de-de/library/ms157905(v=vs.110).aspx Aber das wird nur unbehandelte Ausnahmen in Ihrem Code fangen. Eine unbehandelte Ausnahme ist das Schlimmste, was Ihrer Anwendung passieren kann, da sie normalerweise beendet wird (Absturz). Versuchen Sie, mögliche Ausnahmen in einem 'try catch finally'-Block zu behandeln. –

+7

Haben Sie ein allgemeines Verständnis dafür, wie die Fehlerbehandlung in C# funktioniert? –

Antwort

0

Es ist erwähnenswert, dass das Folgende kein Ersatz für eine try .. catch Logik in sensiblen Bereichen Ihrer Anwendung ist. Das Folgende ist kein Hinweis, die Verwendung von try ... catch zu stoppen. Das Folgende ist nur ein Weg, um eine unerwartete Ausnahme zu behandeln und eine nützliche Nachricht zu zeigen (und vielleicht eine E-Mail an den Support mit StackTrace zu senden), bevor die Anwendung heruntergefahren wird statt einer hässlichen Windows-Nachricht (Anwendung XYZ funktioniert nicht mehr).

Sie müssen sich für die Behandlung aller nicht behandelten Ausnahmen registrieren (außer denen für Timer und sekundäre Threads). Program.cs ist ein guter Ort:

static void Main() 
{ 
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
    Application.ThreadException += Application_ThreadException; 
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 


    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
} 

private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 
{ 
    ShowCustomException(e.Exception); 
} 

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    ShowCustomException(e.ExceptionObject as Exception); 
} 

private static void ShowCustomException(Exception ex) 
{ 
    // show your custom exception form 
} 
+1

Es könnte wertvoll sein, dies zu erwähnen - dies kann kontraproduktiv sein, wenn Sie die Anwendung noch entwickeln. Wenn während der normalen Verwendung der Anwendung Ausnahmen auftreten, ist dies keine effektive Lösung. Wickeln Sie stattdessen potenziell fehleranfällige Codeabschnitte in "try..catch" -Blöcke. – Ares

Verwandte Themen