2010-02-18 29 views
9

Aşağıdaki sorunla karşılaşıyorum. FindRoot aslında bir üçüncü parti dll ve ben üzerinde kontrolü yok. Başlangıcı ile çağrılmalıdır. Bazen, FindRoot yöntemi, istisna atar. Bu benim tüm uygulama çökmesine neden olur. Şimdi, FindRoot istisna atarsa ​​bile uygulamamın çökmesini nasıl engellerim.BeginInvoke, istisna atar

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

} 

cevap

8

kullanışlı bu yazıyı doğrudan kullanın geri arama yerine bulabilir Önceden bir arka plan iş parçacığı bu kod aradığınız gibi bana bakıyor. FindRoot() çalıştırmak için başka bir iş parçacığı başlatmak, garip görünüyor.

3

Aslında durum yakalandı ve böylece EndInvoke çağrınızda etrafında denemek kullanmak gerekir bunu yakalamak için, sen EndInvoke çağırdığınızda yeniden atılmış. 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); 
    } 
} 

:

Sen EndInvoke çağırarak http://msdn.microsoft.com/en-us/magazine/cc163467.aspx

İlgili konular