可以说我有一个类中有一个静态事件。此活动由三个或更多不同的类别订阅。 [可以说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
这不适用于活动模式。您最好创建订阅者注册代理的订阅系统(几乎像是一个事件),但发布者可以逐个浏览订阅者并决定致电该代理。这与多播代表有所不同,因为您不会像事件那样将它们组合成一个。 –