我有以下问题。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);
}发布于 2010-02-18 11:22:36
使用回调,而不是直接调用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()看起来很奇怪。
发布于 2010-02-18 09:36:19
实际上,当您调用EndInvoke时,异常会被捕获并重新抛出,因此要捕获它,您需要在调用EndInvoke时使用try。
您可能会发现这篇文章很有用的http://msdn.microsoft.com/en-us/magazine/cc163467.aspx
https://stackoverflow.com/questions/2287512
复制相似问题