2010-08-23 46 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

相关问题