2010-02-18 40 views
9

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

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

} 

回答

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

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