I have the following code that throws an exception:
ThreadPool.QueueUserWorkItem(state => action());
When the action throws an exception
What I usually do is to create a big try ... catch block inside the action() method then store the exception as a private variable then handle it inside the main thread