I have the following problem. FindRoot is actually in a third party dll and I do not have control over it. It has to be called via Begin invoke. Sometimes,
Actually the exception is caught and re-thrown when you call EndInvoke, so to catch it you need to use try around your call to EndInvoke.
You may find this article useful http://msdn.microsoft.com/en-us/magazine/cc163467.aspx
Use a callback instead of directly calling EndInvoke:
using System.Runtime.Remoting.Messaging;
...
static void back_DoWork()
{
AddRoot root = FindRoot;
root.BeginInvoke(12.0, new AsyncCallback(callback), root);
}
static void callback(IAsyncResult result)
{
AddRoot dlg = (AddRoot)(((AsyncResult)result).AsyncDelegate);
try
{
dlg.EndInvoke(result);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Btw: it looks to me like you are already calling this code from a background thread. Starting yet another thread to run FindRoot() looks strange.