问题:我想在我的控制台应用程序中为未处理的异常定义一个全局异常处理程序。在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/