ThreadExceptionEventHandler and invoking delegates
If I assign a <code>ThreadExceptionEventHandler</code> to <code>Application.ThreadException</code>, why when I invoke a delegate method using a control on the main application thread are any exceptions thrown by that delegate not triggering the event handler?

i.e.
<pre><code>
static void Main()
{
    ...
    
    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);    
    Application.Run(new Form1());
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    Console.Error.Write("A thread exception occurred!");            
}

...

private void Form1_Load(object sender, EventArgs e)
{
    Thread syncThread = new Thread(new ThreadStart(this.ThrowException));
    syncThread.Start();
}

private void ThrowException()
{
    button1.Invoke(new MethodInvoker(delegate
    {
        // Not handled by ThreadExceptionEventHandler?
        throw new Exception();
    }));
}
</code></pre>

The context on this is that I have a background thread started from a form which is throwing an unhandled exception which terminates the application. I know this thread is going to be unreliable since it is network connectivity reliant and so subject to being terminated at any point, but I'm just interested as to why this scenario doesn't play out as I expect?
ThreadExceptionEventHandler and invoking delegates
===

If I assign a <code>ThreadExceptionEventHandler</code> to <code>Application.ThreadException</code>, why when I invoke a delegate method using a control on the main application thread are any exceptions thrown by that delegate not triggering the event handler?

i.e.
<pre><code>
static void Main()
{
    ...
    
    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);    
    Application.Run(new Form1());
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    Console.Error.Write("A thread exception occurred!");            
}

...

private void Form1_Load(object sender, EventArgs e)
{
    Thread syncThread = new Thread(new ThreadStart(this.ThrowException));
    syncThread.Start();
}

private void ThrowException()
{
    button1.Invoke(new MethodInvoker(delegate
    {
        // Not handled by ThreadExceptionEventHandler?
        throw new Exception();
    }));
}
</code></pre>

The context on this is that I have a background thread started from a form which is throwing an unhandled exception which terminates the application. I know this thread is going to be unreliable since it is network connectivity reliant and so subject to being terminated at any point, but I'm just interested as to why this scenario doesn't play out as I expect?