Как я могу знать, обрабатывается ли событие .NET уже?

Я написал некоторый код для обработки события следующим образом:

AddHandler myObject.myEvent, AddressOf myFunction

Казалось, что все работало сначала, но когда я выполнил отладчик, я обнаружил это часто, myFunction несколько раз работал бы каждый раз myObject.myEvent запущенный. Я выяснил, что позволил коду добавлять обработчик событий для выполнения несколько раз, приведя к этому поведению.

Существует ли способ, которым я могу сделать что-то вроде этого?

If myObject.myEvent is not handled Then
  AddHandler myObject.myEvent, AddressOf myFunction
End If
11
задан bdukes 13 August 2010 в 13:38
поделиться

4 ответа

Предполагая, что событие публикуется не вашим кодом, вы не сможете. Идея состоит в том, что подписчики изолированы друг от друга - вы не можете узнать о других подписчиках событий, сами инициировать событие и т. Д.

Если проблема в том, что вы добавляете свой собственный обработчик несколько раз, вы сможете исправить это самостоятельно, отслеживая, вы добавили обработчик. Идея Стивена удалить обработчик перед его добавлением - интересный обходной путь: можно попытаться удалить обработчик, даже если он не подписан. Однако я бы рассматривал это как обходной путь к вашему приложению, не зная, что оно должно делать. Это очень быстрое краткосрочное решение, но я бы побеспокоился о том, чтобы оставить его на более долгий срок.

14
ответ дан 3 December 2019 в 04:51
поделиться

Невозможно определить, что обработчик уже подключен, но вы можете безопасно вызвать RemoveHandler для события перед вызовом AddHandler. Если обработчика еще нет, RemoveHandler не подействует.

3
ответ дан 3 December 2019 в 04:51
поделиться

Сохраните результаты обработчика событий в базе данных / сеансе, а затем прочитайте их снова, чтобы проверить, было ли событие уже обработано.

0
ответ дан 3 December 2019 в 04:51
поделиться

Либо:

  1. Не добавляйте обработчик больше, чем однажды.

  2. Попытка удалить обработчик просто перед его добавлением.

7
ответ дан 3 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: