BeginInvoke 抛出异常

9

我有一个问题。 FindRoot 实际上在第三方dll中,我无法控制它。 必须通过Begin invoke调用。有时,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);

}
2个回答

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

顺便提一句,看起来您已经在从后台线程调用此代码。启动另一个线程来运行FindRoot()似乎有些奇怪。

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接