我使用.NET 1.1兼容模式处理未处理的异常。问题在于,当LegacyUnhandledExceptionPolicy设置为“1”(这是我想要的),我无法捕获和忽略ThreadAbortException。
示例代码:
App.config:
当遗留异常处理设置为“0”(关闭)时,上述代码会如预期地静默处理ThreadAbortException。
但是,当遗留异常处理设置为“1”时,上述代码会将ThreadAbortException打印到控制台,这不是我期望的结果。
有什么想法吗?
谢谢。
示例代码:
App.config:
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="1"/>
</runtime>
</configuration>
代码:
class Program {
static void Main(string[] args) {
AppDomain.CurrentDomain.UnhandledException += _onBackgroundThreadCrash;
var t = new Thread(_worker) { IsBackground = true };
t.Start();
Thread.Sleep(1000);
t.Abort();
Console.ReadLine();
}
private static void _worker() {
try {
while (true);
} catch (ThreadAbortException) {
// expected thread exit, don't rethrow
}
}
private static void _onBackgroundThreadCrash(object sender, UnhandledExceptionEventArgs e) {
Console.WriteLine(e.ExceptionObject as Exception);
}
}
当遗留异常处理设置为“0”(关闭)时,上述代码会如预期地静默处理ThreadAbortException。
但是,当遗留异常处理设置为“1”时,上述代码会将ThreadAbortException打印到控制台,这不是我期望的结果。
有什么想法吗?
谢谢。