One of my Paris-based colleagues, Nigel Watling, regularly posts insightful nuggets
of information to an internal distribution list he's responsible for. I suggested
he start a blog back at TechEd last year, since he's got enough material to make it
really interesting. In the meantime, he pointed out a really useful sample that should
be mandatory for any professional Windows Forms application, and I've shamelessly
plagiarised his supporting text as it's very useful...
He points out that when handling exceptions in WinForms, there will inevitably be
some (unknown) exceptions that you do not handle in your error handling code for the
form. This is guaranteed due to the non-linear nature of WinForms. To handle these
you should register your own handler with the Windows Forms API using the Application.ThreadException event.
Doing this suppresses the informational (but less professional) debug dialog that
comes up by default.
This only works, however, for the thread that is pumping GUI messages, and so you
will still have to rely on the CLR unhandled exception handler for all other exceptions
(finalizer thread, thread-pool thread, manual thread, etc.). You can register for
this handler using the AppDomain.UnhandledException event.
Full details and a code sample are available
here on GotDotNet.
Great tip - thanks Nigel.