C # .NET правильное событие подписки и отмены подписки - PullRequest
2 голосов
/ 14 июля 2010

У меня есть приложение, которое работает непрерывно, оно создает и уничтожает классы, некоторые из которых имеют такие события, как события щелчка мышью и тому подобное ... Первый вопрос: как правильно отписаться? Если подписка выглядит так:

Panel1.MouseClick += new MouseEventHandler(Action_MouseClick);

уместно ли отписаться так:

Panel1.MouseClick -= new MouseEventHandler(Action_MouseClick);

ИЛИ это нормально сделать:

Panel1.MouseClick -= Action_MouseClick;

или в любом случае хорошо?

Другой мой вопрос: если я использую Microsoft Visual C # studio для создания событий через конструктор, автоматически ли он отписывается как часть метода Dispose? Или мне все-таки нужно поставить метод отписки в коде?

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

Любой способ отмены подписки будет иметь одинаковый эффект, и оба будут правильными.

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

1 голос
/ 14 июля 2010

Код конструктора не будет автоматически отписываться, но подписки не должны поддерживать элементы управления в активном состоянии, пока форма и все ее элементы управления больше не доступны из кода приложения.Устаревшие обработчики событий являются в основном проблемой, когда подписчик и источник событий имеют разные времена жизни, что, как правило, не относится к форме и ее элементам управления.

Если вы создаете / удаляете элементы управления динамически, вы, вероятно, захотитеуправлять событиями, хотя в этом нет особой необходимости, если на удаленные элементы управления больше нет ссылок, а удаленные элементы управления прекращают запуск событий.

1 голос
/ 14 июля 2010

Другой мой вопрос: если я использую Microsoft Visual C # studio для создания событий через конструктор, автоматически ли он отписывается как часть метода «Dispose»?Или мне все еще нужно добавить метод отказа от подписки в код?

Из памяти: нет, он не будет генерировать код отказа от подписки.

Вы можете дважды проверить этосамостоятельно, открыв файл classname.designer.cs и изучив сгенерированный метод Dispose.

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