2010-08-23 33 views
2

我有一個委託指向3種不同的方法。這些方法被添加到其調用列表中。如何處理委託目標中發生的異常

什麼是第二種方法拋出異常?我仍然需要執行第三種方法。

我覺得一個替代方案是下文提到的代碼

  public delegate void MethodHandler(); 
      A oa = new A(); 
      B ob = new B(); 
      C oc = new C(); 
      D od = new D(); 


      MethodHandler M = oa.TestM; 
      M += ob.TestM; 
      M += oc.TestM; 
      M += od.TestM; 

      foreach (Delegate item in M.GetInvocationList()) 
      { 
       try 
       { 
        item.DynamicInvoke(null); 
       } 
       catch 
       { 
       } 

      } 

是否有任何其他的替代避免這種情況?

+0

你不應該使用'DynamicInvoke',只投了委派給任何類型的人,並稱之爲一種方法。 – leppie 2010-08-23 12:44:07

+0

@ leppie-背後沒有使用DynamicInvoke的任何具體原因? – Ram 2010-08-23 17:58:42

+0

這很慢。 – leppie 2010-08-23 19:03:52

回答

0

你不會要能夠「避免」此在意義上使用try/catch模式,以確保您的代碼進行過去那種拋出異常的委託。

沒有什麼能夠阻止你編寫自己的類來包裝這個功能,但是 - 爲了減少在你使用你的代理的任何地方這個確切代碼的潛在擴散。

順便說一句,我相信你可以改變這一行:

item.DynamicInvoke(null); 

這個(避免DynamicInvoke):

MethodHandler handler = (MethodHandler)item; 
handler.Invoke(); 
+0

你應該只是調用'handler()'; P – leppie 2010-08-23 12:47:55

+0

@leppie:它是一樣的。有些人更願意明確包含「Invoke」調用。我沒有特別的偏好,但我認爲OP會更清晰地直接替代DynamicInvoke調用。 – 2010-08-23 13:58:45

相關問題