c# - 控制台应用程序中的 .NET 全局异常处理程序

标签 c# .net vb.net exception-handling console-application

问题:我想在我的控制台应用程序中为未处理的异常定义一个全局异常处理程序。在asp.net中,可以在global.asax中定义一个,在windows applications/services中,可以定义如下

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);

但是如何为控制台应用程序定义全局异常处理程序?
currentDomain 似乎不起作用 (.NET 2.0)?

编辑:

啊,愚蠢的错误。
在 VB.NET 中,需要在 currentDomain 前面添加“AddHandler”关键字,否则在 IntelliSense 中看不到 UnhandledException 事件...
这是因为 VB.NET 和 C# 编译器以不同的方式处理事件。

最佳答案

不,这是正确的做法。这完全按照它应该的方式工作,你可以从中工作:

using System;

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

    static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) {
        Console.WriteLine(e.ExceptionObject.ToString());
        Console.WriteLine("Press Enter to continue");
        Console.ReadLine();
        Environment.Exit(1);
    }
}

请记住,您无法通过这种方式捕获由抖动生成的类型和文件加载异常。它们发生在您的 Main() 方法开始运行之前。捕捉这些需要延迟抖动,将有风险的代码移到另一个方法中并对其应用 [MethodImpl(MethodImplOptions.NoInlining)] 属性。

关于c# - 控制台应用程序中的 .NET 全局异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133199/

相关文章:

c# - Visual Studio 2013 错误列表未显示失败构建的错误

c# - Asp.Net MVC - 在数据库中插入多行

c# - WCF 安全实现设计问题

.net - 将 TLS 证书添加到异常为 : The request was aborted: Could not create SSL/TLS secure channel 的 API 请求

c# - GPS计算Windows Phone 7上两点之间的距离

c# - 图像被分配给 ListView 的另一个行项目

.net - 持续集成是否消除了对庞大的 Visual Studio 解决方案的需求?

c# - 使用 .Net 框架判断文件是否为图像,而不是通过检查魔数(Magic Number)

vb.net - 如何使用 AutoIt 或 Windows UI 自动化单击应用程序中的按钮

vb.net - 如何使用 WPF 读写 CSV 文件?