2012-11-05 67 views
5

我在C#中有一個事件。有五個訂戶。所有訂戶都是不同的類別。但是,當提高事件我希望不是所有的用戶/處理程序都應該被通知來處理這個事件。我應該有一些過濾機制,然後只通知剩餘的用戶。什麼可能是實現這一目標的最佳方式?C#事件調用列表過濾

+0

你介意闡述過濾器應該如何工作嗎?它是依賴於事先設置的「消息類型」,還是第一個用戶所做的事情,它使得事件應該被觸發給其他聽衆(有點像「我已經照顧好了這一點,其他人不'不得不做任何事情「)? – Patrick

+0

是的,它取決於消息的類型。將會有一個ID說,我只需要援引那些與TAR有關的訂閱者 –

+0

這個ID的列表是否預先確定?換句話說,你可以爲每個id添加一個事件,還是它是動態的,因爲列表在應用程序的生命週期中可以更改? – Patrick

回答

2

如果你想用你現有的方式來完成,那麼只需遍歷事件的調用列表即可。現在

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

,你可以看到我已經投i​​tem.Target一種類型ICanDoThing的,這是我剛剛做了一個公開的方法「CanDoThing」的接口。這允許您查詢對象是否支持您的特定需求。

您應該問您是否應該爲此使用事件,但上面的內容可以讓您這樣做。

1

我想你在這裏需要多個活動,以便訂閱者可以訂閱他們真正想要的活動。

訂閱活動意味着您對活動感興趣。如果你對 不感興趣,你不應該訂閱它。