2009-05-08 3 views
2

나는 여러 대리인이 이벤트에 첨부 된 (멀티 캐스트 대리자) 시나리오가 있습니다.여러 대리인이 연결되어 있고 하나가 실패 함

이러한 메서드/대리자 (있는 경우)를 호출하는 순서는 무엇이 될 수 있습니까 ???

대리인과 연결된 메서드 중 하나에서 예외가 throw됩니다.

  1. 이벤트가 더 이상 처리되지 않게됩니까 ... ???
  2. 첨부 된 나머지 메서드가 계속됩니까? ???

이 시나리오를 처리하는 방법에 대해서는 명확하지 않습니다.

도움이 매우 감사합니다.

답변

3

예, 예외를 throw하는 이벤트 처리기는 더 이상 실행을 중지하고 예외는 호출 스택을 전파합니다. 즉, 후속 이벤트 핸들러 이 호출되지 않습니다. 각 이벤트 핸들러가 이벤트를 발생시키는 클래스에서 호출되도록 보장하려면 MulticastDelegate 내의 각 대리자를 반복하고 try-catch 블록 내에서 개별적으로 호출해야합니다. 물론 쉬운 솔루션은 핸들러 내에서 발생할 수있는 오류를 잡는 것 뿐이므로 대부분의 경우이 방법을 사용하는 것이 좋습니다.

0

멀티 캐스트 대리자의 메서드는 어떤 순서로든 호출됩니다. 일반적으로 대리자에 추가 된 순서대로 호출되지만, 항상 그렇지는 않습니다. 따라서 프로그래머는 호출 순서에 의존해서는 안됩니다.

delegatename.GetInvocationList()를 사용하여 멀티 캐스트 대리자의 모든 메서드를 반복하고 루프 내에서 try catch 블록을 사용하여 예외를 catch하고 다음 메서드 호출을 계속해야합니다.

나머지는 몇 가지 예외 사항을 유발할 수있는 방법을 확인하는 방법에 대해서는 article을 참조하십시오.

관련 문제