Как можно использовать такие события, как CancelEventArgs?

Как можно использовать событие 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 (по крайней мере). Если невозможно получить все значения, они предполагают только одного абонента для события?

Ответ 1

Чтобы запросить каждого абонента отдельно, вам необходимо получить доступ к списку:

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

Затем вы можете проверить каждый по очереди; иначе вы просто получите окончательный голос.

Ответ 2

Обычно, в большинстве случаев, класс просто позволяет нескольким подписчикам, но каждый получает тот же экземпляр CancelEventArgs.

Если какой-либо из абонентов установил Cancel to true, операция будет считаться отмененной.

Вы можете обойти это, получив список вызовов и отправив событие каждому подписчику, но обычно это не требуется.