Как можно использовать такие события, как CancelEventArgs? - PullRequest
13 голосов
/ 08 октября 2009

Как можно использовать событие 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 ]

8 голосов
/ 08 октября 2009

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

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

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

6 голосов
/ 08 октября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...