2010-08-23 7 views
2

3 가지 방법을 가리키는 대리인이 있습니다. 이러한 메소드는 호출 목록에 추가됩니다.대리자 대상에서 발생한 예외를 처리하는 방법

두 번째 방법은 예외를 throw하는 것은 무엇입니까 ??? 나는 여전히 세 번째 방법을 실행할 필요가있다.

나는이 문제를 피하기 위해 다른 대안은 거기에 하나 개의 대안 아래 코드

  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', 그냥 캐스트 :합니다 (DynamicInvoke 피하기 위해)를이에

item.DynamicInvoke(null); 

: 그런데

, 난 당신이 줄을 변경할 수 있다고 생각 이제까지 무엇을 입력했는지에 대해 '위임 (Delegate)'을하고 메소드처럼 호출하십시오. – leppie

+0

@ leppie- DynamicInvoke를 사용하지 않은 구체적인 이유는 무엇입니까? – Ram

+0

매우 느립니다. – leppie

답변

0

당신은 예외가 발생했습니다 대리인 과거의 코드 진행을 보장하기 위해 try/catch 패턴을 사용하여 하지의 의미에서이 "피"할 수하지 않을거야.

M 대리자를 사용하는 모든 곳에서이 정확한 코드의 잠재적 확산을 완화하기 위해이 기능을 래핑하기 위해 자신 만의 클래스를 작성하는 것을 중단하지 마십시오.

MethodHandler handler = (MethodHandler)item; 
handler.Invoke(); 
당신은 사용하지 말아야
+0

당신은 단지'handler()'를 호출해야합니다; P – leppie

+0

@leppie : 똑같은 것입니다. 어떤 사람들은 명시 적으로'Invoke' 호출을 포함하기를 선호합니다. 나는 정말로 환경 설정을 가지고 있지 않지만,'DynamicInvoke' 호출의 직접적인 대체물로서 OP에 더 명확해질 것이라고 생각했습니다. –

관련 문제