2010-02-18 4 views
9

다음과 같은 문제가 있습니다. FindRoot는 제 3 자 dll에 있으며 실제로 제어 할 수는 없습니다. 시작 호출을 통해 호출되어야합니다. 경우에 따라 FindRoot 메서드가 예외를 throw합니다. 이로 인해 내 모든 응용 프로그램이 중단됩니다. FindRoot가 예외를 throw하더라도 응용 프로그램이 손상되는 것을 방지하려면 어떻게해야합니까?BeginInvoke가 예외를 throw합니다

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

유용이 문서를 직접 사용 콜백 대신을 찾을 수 있습니다 당신은 이미 백그라운드 스레드에서이 코드를 호출하는 것처럼 나에게 보인다. FindRoot()를 실행하는 또 다른 스레드를 시작하는 것이 이상하게 보입니다.

3

은 실제로 예외가 잡힌 그래서 당신이 EndInvoke에 전화 주위를 시도 사용할 필요가 그것을 잡으려고, 당신은 EndInvoke를 호출 할 때 다시는-발생합니다. Btw은

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

:

당신은 EndInvoke를 호출 http://msdn.microsoft.com/en-us/magazine/cc163467.aspx

관련 문제