代码之家  ›  专栏  ›  技术社区  ›  FerranB Tom

如何使用CancelEventArgs之类的事件?

  •  13
  • FerranB Tom  · 技术社区  · 16 年前

    System.ComponentModel.CancelEventArgs 被使用?假设我们有以下代码:

        public event CancelEventHandler EventTest = delegate { };
    
        public void MakeSomethingThatRaisesEvent()
        {
            CancelEventArgs cea = new CancelEventArgs();
            EventTest(this, cea);
            if (cea.Cancel)
            {
                // Do something
            }
            else
            {
                // Do something else
            }
        }
    

    如果在事件上注册了多个委托,会发生什么情况?有没有办法得到所有订阅者的结果?

    有时(至少)会在Winforms上使用此选项。如果无法获取所有值,那么它们假设事件只有一个订阅者?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Marc Gravell    16 年前

    要单独询问每个订户,您需要访问列表:

    foreach (CancelEventHandler subHandler in handler.GetInvocationList())
    {
         // treat individually
    }
    

        2
  •  6
  •   Reed Copsey    16 年前

    通常,在大多数情况下,该类只允许多个订阅者,但每个订阅者都获得相同的CancelEventArgs实例。

    如果任何订阅服务器将“取消”设置为true,则该操作将被视为已取消。

    您可以通过获取调用列表并向每个订阅者发送事件来解决此问题,但这通常不是必需的。