事件 - 发布和订阅

Events - Publish & Subscribe

假设我有一个 class,其中有一个静态事件。此事件已被三个或更多不同的 class 订阅。 [假设 4]

现在,当值得注意的事情发生时,class 中的事件就会被引发。

由于4个不同的class订阅了事件,它们中对应的处理程序执行各自的代码。

现在,如果我不希望我的 class 的处理程序代码不执行 3 和 4。我需要做什么?

请帮忙。 提前致谢!

您希望处理程序在什么情况下触发?

您可以采用以下模式,该模式将提供一种机制来防止处理程序基于唯一标识符触发。

在这个例子中,我创建了一些简单的事件参数,事件将使用这些参数来告诉处理程序一个唯一标识符 (Guid):

public class MyEventArgs : EventArgs { public Guid Identifier { get; set; } }

然后,创建一个简单的 class 来引发事件:

public class EventGenerator
{
    public EventHandler<MyEventArgs> TheEvent;

    public void RaiseEvent(Guid identifier)
    {
        if (TheEvent != null) 
            TheEvent(this, new MyEventArgs(){Identifier = identifier});
    }
}

最后,您可以拥有一个 class(任意数量),它们都将订阅该事件,但仅当事件参数提供不同的标识符时才会 运行 它:

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 ...
    }
}

不过,这只是一个示例 - 您可能需要一些不同的东西,只需在选择的时间取消订阅活动即可实现。这取决于我最初问题的答案。