可以說我有一個類中有一個靜態事件。此活動由三個或更多不同的類別訂閱。 [可以說4]事件 - 發佈和訂閱
現在,當有什麼值得注意的事情發生在課堂上的事件得到提升。
由於4個不同的類訂閱事件,它們中的相應處理程序執行它們各自的代碼。
現在,如果我不想讓我的班級的處理程序代碼執行3 & 4。我需要做什麼?
請幫忙。 在此先感謝!
可以說我有一個類中有一個靜態事件。此活動由三個或更多不同的類別訂閱。 [可以說4]事件 - 發佈和訂閱
現在,當有什麼值得注意的事情發生在課堂上的事件得到提升。
由於4個不同的類訂閱事件,它們中的相應處理程序執行它們各自的代碼。
現在,如果我不想讓我的班級的處理程序代碼執行3 & 4。我需要做什麼?
請幫忙。 在此先感謝!
在什麼條件下你想讓你的處理程序開火?
您可以使用以下模式,它將提供一種機制來防止處理程序基於唯一標識符進行觸發。
在這個例子中,我創建一些簡單的事件參數該事件將用來告訴處理器的唯一標識符(GUID):
public class MyEventArgs : EventArgs { public Guid Identifier { get; set; } }
然後,創建一個簡單的類引發事件:
public class EventGenerator
{
public EventHandler<MyEventArgs> TheEvent;
public void RaiseEvent(Guid identifier)
{
if (TheEvent != null)
TheEvent(this, new MyEventArgs(){Identifier = identifier});
}
}
最後,你可以有一個類(任意數量的這些),將所有訂閱的事件,但將只運行它時,事件參數提供不同的標識符:
public class TheClass
{
private readonly Guid _identifier;
private EventGenerator _eventGenerator;
// The constructor is given the event generator class instance
public TheClass(EventGenerator evGen)
{
// create a unique identifier for the class
_identifier = Guid.NewGuid();
// subscribe to the event
_eventGenerator = evGen;
_eventGenerator.TheEvent += TheEvent;
}
private void TheEvent(object sender, MyEventArgs e)
{
// when the event fires, check the Guid and if it isn't a match, don't continue ...
if (e.Identifier == _identifier) return;
// rest of the handler goes here ...
}
}
然而,這僅僅是一個例子 - 您可能需要一些不同的東西,只需在選擇時間取消訂閱活動即可實現。這取決於我最初的問題的答案。
謝謝你幫我解決這個問題。 – Deepanshu
如果您不希望這些處理程序執行,他們爲什麼訂閱?你怎麼知道哪些處理程序不執行?目前你的問題還不清楚。 –
如果您公開了該活動,則可以在其他班級中重複使用該活動 – Kyra
這不適用於活動模式。您最好創建訂閱者註冊代理的訂閱系統(幾乎像是一個事件),但發佈者可以逐個瀏覽訂閱者並決定致電該代理。這與多播代表有所不同,因爲您不會像事件那樣將它們組合成一個。 –