c# - 如何实现可取消事件?

标签 c# events

在 System.ComponentModel 中,有一个名为 CancelEventArgs 的类,它包含一个可以在事件监听器中设置的 Cancel 成员。 MSDN 上的文档解释了如何使用它来取消监听器中的事件,但我如何使用它来实现我自己的可取消事件?有没有办法在每个监听器触发后检查 Cancel 成员,还是我必须等到事件触发了所有监听器之后?

最佳答案

要依次检查每个监听器,您需要通过 GetInvocationList 手动获取处理程序:

class Foo
{
    public event CancelEventHandler Bar;

    protected void OnBar()
    {
        bool cancel = false;
        CancelEventHandler handler = Bar;
        if (handler != null)
        {
            CancelEventArgs args = new CancelEventArgs(cancel);
            foreach (CancelEventHandler tmp in handler.GetInvocationList())
            {
                tmp(this, args);
                if (args.Cancel)
                {
                    cancel = true;
                    break;
                }
            }
        }
        if(!cancel) { /* ... */ }
    }
}

关于c# - 如何实现可取消事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/295254/

相关文章:

javascript - react JS : Differentiate between Click and Click + Shift event

c# - 将 ISerializable 与 DataContractSerializer 一起使用时,如何阻止序列化程序输出类型信息?

c# - 是否可以在创建 Autofac LifetimeScope 后向其添加注册?

c# - 亚马逊视频点播 API

events - this.Loaded += (s, e) => this.loaded = true;?

jquery - jQuery 中的类名更改事件

c# - 在 C# 中使用 Magick.NET

c# - 我在理解 IQueryable<T> 时遇到问题

asp.net - 在 ASP.NET AjaxToolkit 中捕获 Accordion 控件的 SelectedIndexChanged 事件

angular - Angular 2 更改前和更改后