BeginInvoke抛出exception

我有以下问题。 FindRoot实际上是在第三方dll中,我无法控制它。 它必须通过Begin调用来调用 。 有时,FindRoot方法会抛出exception。 这导致我的整个应用程序崩溃。 现在,即使FindRoot抛出exception,我如何防止我的应用程序崩溃。

delegate void AddRoot(double number); public static void FindRoot(double number) { throw new Exception();/// sometimes is thrown. } static void back_DoWork(object sender, DoWorkEventArgs e) { AddRoot root = FindRoot; root.BeginInvoke(12.0, root.EndInvoke, root); } 

使用回调而不是直接调用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); } } 

顺便说一句:它看起来像你已经从后台线程调用此代码。 启动另一个运行FindRoot()的线程看起来很奇怪。

实际上,当您调用EndInvoke时会捕获并重新抛出exception,因此要捕获它,您需要尝试使用对EndInvoke的调用。

你可能会发现这篇文章很有用http://msdn.microsoft.com/en-us/magazine/cc163467.aspx