在C#中,如何暂停事件的绑定委托之一?

我当前正在使用一个事件来触发一组委托,并且我需要能够防止其余的委托从另一个委托中触发.

以下代码复制了场景…

//nonsense class
public class Foo {
    public string Bar { get; set; }
}

//nonsense event.
public event Action<Foo> SomeEvent;

void BindAndFire() {
    //wire it up.
    SomeEvent += (foo) => { 
        var a = DateTime.Now.Millisecond % 2;
        foo.Bar = (a == 0) ? "Hooray" : "Boo";
    };
    SomeEvent += (foo) => { 
        if(foo.Bar == "Boo") {
            SomeEvent.CANCEL_THE_REST(); //what do I do here?
        }
    };
    SomeEvent += (foo) => { 
        foo.Bar += ", you made it!";
    };

    //fire the event.
    SomeEvent(new Foo());
}

鉴于上述情况,我该怎么办?我可以更改为“动作列表”之类的东西,但100%可以,但是看来我应该能够停止执行后续事件.

注意:显示的代码仅是重复该问题,而不是我的程序结构.实际的程序正在处理传入的网络事件,并在它们上运行有任意委托的列表……我不想将整个事件发布成一个问题.

…也许我只是试图以一种不希望使用的方式使用它们,我对此表示满意,我只是希望我只需要学习一些有关事件的新知识C#.

感谢您的时间!

解决方法:

您可以使用诸如HandledEventArgs之类的东西(或使用类似的概念),与此同时,在处理事件时,可以设置“ handled”属性,并在其他委托中检查此属性.

不确定是否可以强制它取消所有其他调用,并且如果稍后进行调试,可能会有点混乱.

上一篇:javascript-如何使用jQuery对象作为委托方法的参数


下一篇:C#-事件订阅和变量覆盖