Почему внутреннее исключение достигает обработчика ThreadException, а не фактического выданного исключения?

Я вижу странное поведение, когда выкидываю исключения и ловлю их вApplication.ThreadException обработчик события.

В основном то, что происходит в приведенном ниже примере, заключается в том, что вDoWork обработчик событияBackgroundWorker,RunWorkerCompleted Обработчик событий перебрасывает новое исключение с исходным в качестве внутреннего исключения.

Почему внутреннее исключение появляется вThreadException обработчик события, а не бросаемое острое исключение? Если я не предоставлю внутреннее исключение вRunWorkerCompleted Обработчик событий, правильное исключение будет отображаться.

using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace WierdExceptionApp
{
    class WierdExceptionForm : Form
    {
        BackgroundWorker worker = new BackgroundWorker();

        public WierdExceptionForm()
        {
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
            worker.RunWorkerAsync();
        }

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                throw new Exception("worker_RunWorkerCompleted", e.Error);
            }
        }

        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            throw new Exception("worker_DoWork");
        }

        [STAThread]
        static void Main()
        {
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.Run(new WierdExceptionForm());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message);
        }
   }
}

Ответы на вопрос(2)

Ваш ответ на вопрос