我当前正在使用一个事件来触发一组委托,并且我需要能够防止其余的委托从另一个委托中触发.
以下代码复制了场景…
//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”属性,并在其他委托中检查此属性.
不确定是否可以强制它取消所有其他调用,并且如果稍后进行调试,可能会有点混乱.