BackgroundWorkers的全球捕获量

时间:2016-12-02 23:25:07

标签: c# .net exception-handling .net-4.5 backgroundworker

我有以下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确实有它的例外泡到全球处理程序。其余的没有。但其中一个没有。我无法弄清楚为什么.. ..)

0 个答案:

没有答案