BeginInvoke抛出异常

Pra*_*ant 9 c# delegates

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

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);

}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 8

使用回调而不是直接调用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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