我有以下C#控制台应用程序:
class Program
{
static void Main(string[] args)
{
var handler = new UnhandledExceptionEventHandler(ExceptionHandler);
AppDomain.CurrentDomain.UnhandledException += handler;
try
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (sender, eventArgs) =>
{
Console.WriteLine("About to fail");
throw new ApplicationException("Bad Things");
};
worker.RunWorkerAsync();
}
finally
{
AppDomain.CurrentDomain.UnhandledException -= handler;
}
Console.WriteLine("Press Enter To Continue");
Console.ReadLine();
}
private static void ExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
// THIS NEVER GETS CALLED!!!! :(
Console.WriteLine("Exception: " + ((Exception)e.ExceptionObject).Message);
}
}
基本上它设置了一个AppDomain异常处理程序,然后在后台worker上抛出异常。
关于堆栈溢出的很多问题似乎表明应该调用我的方法ExceptionHandler
。
但事实并非如此。
有没有办法让我的应用程序收到所有异常的通知?特别是那些没有从BackgroundWorkers那里得到的东西?
注意:我的真实应用程序是一个巨大的WPF应用程序。这只是我问题的缩小方案。 (一个有趣的旁注,在我的应用程序中,我有一个BackgrounWorker确实有它的例外泡到全球处理程序。其余的没有。但其中一个没有。我无法弄清楚为什么.. ..)