首頁 >後端開發 >C++ >如何在 .NET 控制台應用程式中實作全域異常處理程序?

如何在 .NET 控制台應用程式中實作全域異常處理程序?

Barbara Streisand
Barbara Streisand原創
2025-01-24 08:06:11956瀏覽

How to Implement a Global Exception Handler in .NET Console Applications?

.NET 控制台應用程式中的全域異常處理

控制台應用程式也需要一種機制來處理未處理的異常。雖然 ASP.NET 應用程式可以使用 global.asax,而 Windows 應用程式/服務可以使用 AppDomain 中的 UnhandledException 事件處理程序,但控制台應用程式採用略微不同的方法。

控制台應用程式的解決方案

在 .NET 中,為控制台應用程式定義全域異常處理程序的正確方法是使用 AppDomain 類別的 UnhandledException 事件:

<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += MyExceptionHandler;</code>

這在 .NET 2.0 及更高版本中按預期工作。

針對 VB.NET 開發人員的說明

在 VB.NET 中,必須在 currentDomain 之前使用「AddHandler」關鍵字,否則 IntelliSense 中將看不到 UnhandledException 事件。語法上的差異源自於 VB.NET 和 C# 如何處理事件處理。

範例

這是一個使用 C# 在控制台應用程式中進行全域異常處理的範例:

<code class="language-csharp">using System;

class Program {
    static void Main(string[] args) {
        AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
        throw new Exception("发生异常");
    }

    static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) {
        Console.WriteLine(e.ExceptionObject.ToString());
        Console.WriteLine("按 Enter 键继续");
        Console.ReadLine();
        Environment.Exit(1);
    }
}</code>

限制

需要注意的是,這種方法無法捕獲在 Main() 方法開始運行之前由 JIT 編譯器產生的類型和檔案載入異常。要擷取這些異常,必須延遲 JIT 編譯器,並將有風險的程式碼移到單獨的方法中,並套用 [MethodImpl(MethodImplOptions.NoInlining)] 屬性。

以上是如何在 .NET 控制台應用程式中實作全域異常處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn