WithEvents / Handles лучше, чем Remove / AddHandler? - PullRequest
8 голосов
/ 05 февраля 2010

С точки зрения памяти (удалить добавленный обработчик после использования и т. Д.), Является ли использование WithEvents и Handles предпочтительным для RemoveHandler и AddHandler?

Связанный вопрос переполнения стека: Обработчик событий и утечки памяти .

Ответы [ 3 ]

5 голосов
/ 05 февраля 2010

Это зависит от того, чего вы пытаетесь достичь. Если у вас есть несколько обработчиков событий, которые должны обрабатывать события для различных элементов управления в течение времени жизни формы / объекта, тогда WithEvents и Handles - самый простой способ. Язык сделает всю грязную работу за вас с точки зрения организации мероприятия. С другой стороны, если вы склонны отключаться от событий во время жизни формы, AddHandler и RemoveHandler являются лучшими вариантами.

4 голосов
/ 04 января 2011

Я предпочитаю WithEvents / Handles в ситуациях, когда это применимо, потому что это лучше выражает то, что код должен делать. Одно предостережение с «WithEvents / Handles» заключается в том, что любой объект, который получает события от объекта с более долгим сроком службы, должен реализовывать IDisposable и должен устанавливать все его переменные WithEvents в Nothing, когда он удаляется, чтобы гарантировать, что все события не связаны. Отключение событий при использовании AddHandler / RemoveHandler также необходимо, но, возможно, более очевидно. При использовании WithEvents несколько легче забыть.

Кстати, я не знаю способа автоматически установить для всех переменных WithEvents значение Nothing. Казалось бы, это достаточно распространенное требование, но по какой-то причине Microsoft не включила такую ​​функцию в VB.

1 голос
/ 05 февраля 2010

Зависит от того, что вы на самом деле делаете, если вы хотите динамически присоединять / отсоединять обработчики событий, тогда используйте AddHandler / RemoveHandler, иначе использование Handles прекрасно.

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