gpt4 book ai didi

c# - BeginInvoke 抛出异常

转载 作者:太空狗 更新时间:2023-10-29 17:47:26 25 4
gpt4 key购买 nike

我有以下问题。 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);

}

最佳答案

使用回调而不是直接调用 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() 看起来很奇怪。

关于c# - BeginInvoke 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com