2010-02-18 42 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()看起來很奇怪。