Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ThreadExceptionEventHandler and invoking delegates

If I assign a ThreadExceptionEventHandler to Application.ThreadException, 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.


static void Main()
{
    ...

    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);    
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    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();
    }));
}

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?

like image 956
Chris Cooper Avatar asked Jul 23 '26 17:07

Chris Cooper


1 Answers

Use AppDomain.CurrentDomain.UnhandledException instead , to catch exceptions that occur in threads not created and owned by Windows Forms

You should definetly see MSDN article to clarify this issue

like image 197
Stecya Avatar answered Jul 25 '26 08:07

Stecya



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!