Как проверить назначенный обработчик события или нет - PullRequest
3 голосов
/ 20 июня 2010

Мой предыдущий вопрос: Как очистить дескрипторы событий в c #

Теперь мне нужно знать, как проверить любой назначенный обработчик событий?

Ответы [ 4 ]

1 голос
/ 20 июня 2010

Если событие относится к тому же классу, где вы будете выполнять проверку, вы можете сравнить с null.Но если это не так, вы должны спросить себя, почему вы заботитесь о внутренней работе класса.Я имею в виду, что это работа класса, которая содержит событие, чтобы заботиться о своих подписчиках, а не наоборот.Но если вы действительно хотите эту информацию, событие, содержащее класс, может предоставить свойство для внешнего мира, например HasEventHandlers.

0 голосов
/ 25 сентября 2013

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

Вот как:

private EventHandler m_myEvent;

public event EventHandler OnEvent
{
    add
    {
        // First try to remove the handler, then re-add it
        m_myEvent -= value;
        m_myEvent += value;
    }
    remove
    {
        m_myEvent -= value;
    }
}

В маловероятном сценарии, когда у вас есть многоадресные делегаты, вы можете столкнуться со странным поведением.

0 голосов
/ 21 декабря 2012

В окне быстрого просмотра я нашел обработчик щелчка btnSubmit со следующим выражением:

(((System.Web.UI.Control)(btnSubmit)).Events.head.handler).Method
0 голосов
/ 20 июня 2010

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

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