2012-11-05 3 views
5

C#에서 하나의 이벤트가 있습니다. 이를 위해 5 명의 가입자가 있습니다. 모든 가입자는 다른 클래스입니다. 하지만 이벤트를 제기하는 동안 나는 모든 구독자/처리기가이 이벤트를 처리하도록 통지 받아야한다고 생각합니다. 몇 가지 필터링 메커니즘이 있어야하며 나머지 가입자에게만 알림을 보내야합니다. 이것을 달성하는 가장 좋은 방법은 무엇일까요?C# 이벤트 호출 목록 필터링

+0

필터가 작동하는 방법을 정교하게 생각해 주시겠습니까? 그것은 미리 설정된 "메시지 유형"에 의존 하는가 아니면 첫 번째 가입자가 이벤트를 다른 수신기로 트리거해야 하는지를 무효화하는 것입니다 (예 : "나는 이미 이것을 돌 보았습니다. 나머지는 없습니다. t는 무엇이라도해야한다 ")? – Patrick

+0

예 메시지 유형에 따라 다릅니다. 이드는 말할 것이고 이것에 기초하여 thar Id와 관련된 가입자 만 호출 할 필요가 있습니다 –

+0

이 ID의 목록은 미리 결정 되었습니까? 즉, 각 ID에 대해 이벤트를 추가 할 수 있습니까? 아니면 동적으로 응용 프로그램의 수명 동안 목록이 변경 될 수 있습니까? – Patrick

답변

2

기존 이벤트와 함께 수행하려는 경우에도 이벤트의 호출 목록을 반복하면됩니다.

var list = localHandler.GetInvocationList(); 
foreach (EventHandler<T> item in list) 
{ 
    if(((ICanDoThing)item.Target).CanDoThing) 
    { 
     item(this, someArgs); 
    } 
} 

지금, 당신은 내가 그냥하는 방법 "CanDoThing을"노출이 만들어 한 인터페이스입니다 ICanDoThing의 종류로 item.Target 캐스팅했습니다 볼 수 있습니다. 이렇게하면 개체가 특정 필요를 지원하는지 여부를 쿼리 할 수 ​​있습니다.

어쨌든 이벤트를 사용해야하는지 여부는 질문해야하지만, 위와 같은 방법으로 허용 할 수 있습니다.

1

여기 여러 이벤트가 필요하다고 생각하여 구독자가 실제로 원하는 이벤트를 구독 할 수 있습니다.

이벤트 구독은 이벤트에 관심이 있음을 의미합니다. 이벤트에 관심이 없다면 구독하지 않아야합니다.