Heim >Backend-Entwicklung >C++ >Wie behandelt man nicht behandelte Ausnahmen in .NET-Konsolenanwendungen effektiv?
Diese Anleitung zeigt, wie Sie nicht behandelte Ausnahmen in .NET-Konsolenanwendungen effektiv verwalten. Im Gegensatz zu GUI- oder Webanwendungen erfordern Konsolen-Apps einen etwas anderen Ansatz mit dem AppDomain.CurrentDomain
-Objekt.
Die übliche Methode, einen Event-Handler an das UnhandledException
-Ereignis anzuhängen, wie unten gezeigt, schlägt in Konsolenanwendungen oft fehl:
<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);</code>
Das liegt daran, dass das AppDomain
nicht sofort verfügbar ist. Die Lösung besteht darin, den Handler mithilfe des =
-Operators in C#:
<code class="language-csharp">AppDomain.CurrentDomain.UnhandledException += MyExceptionHandler;</code>
Dadurch wird sichergestellt, dass der Handler korrekt registriert ist. Hier ist ein Beispiel, das das Ausnahme-Trapping demonstriert:
<code class="language-csharp">static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; throw new Exception("Application Error!"); } static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(e.ExceptionObject.ToString()); Console.WriteLine("An unexpected error occurred. Press Enter to exit."); Console.ReadLine(); Environment.Exit(1); }</code>
Dieser Code registriert die UnhandledExceptionTrapper
-Methode. Wenn eine nicht behandelte Ausnahme auftritt, protokolliert diese Methode die Ausnahmedetails und ermöglicht dem Benutzer, den Fehler zu bestätigen, bevor die Anwendung beendet wird.
Wichtiger Hinweis: Diese Methode fängt keine Ausnahmen ab, die während der JIT-Kompilierung ausgelöst werden (z. B. Typlade- oder Dateiladefehler). Um diese Probleme zu beheben, wenden Sie eine Strategie zur „Verzögerung des Jitters“ an. Dabei wird der potenziell problematische Code in einer separaten Methode isoliert und mit dem Attribut [MethodImpl(MethodImplOptions.NoInlining)]
versehen.
Das obige ist der detaillierte Inhalt vonWie behandelt man nicht behandelte Ausnahmen in .NET-Konsolenanwendungen effektiv?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!