Как я могу определить, прослушивает ли источник цель при использовании слабого менеджера событий - PullRequest
1 голос
/ 07 июля 2011

Я использую слабый менеджер событий в своем приложении WPF, чтобы подключить источник события к цели, используя XXXEventManager.AddListener (source, this); вызов. Тем не менее, я заметил, что мой код иногда подключается к одному и тому же источнику и предназначается более одного раза. Это выглядит так, как будто вызывает / обрабатывает несколько событий, которые фактически одинаковы (то есть по одному на каждое подключение). Можно ли определить, подключена ли уже цель к источнику события, опросив WeakEventManager (или добавив к нему функциональность), или мне придется реализовать свой собственный список для цели?

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

1 Ответ

0 голосов
/ 07 июля 2011

Ну, вы можете проверить с помощью GetInvocationList , если Eventmanager уже подключен.Проверьте, не привязан ли он к этому менеджеру с определенной целью, с другой стороны, я не знаю, возможно ли это.Однако, глядя на PropertychangedEventManager, совершенно нормально добавить несколько слушателей в один менеджер с одной целью (различающейся разными именами свойств)

Для меня правильный способ вызова RemoveListener - использовать IDisposable.Проблема с финализатором состоит в том, что ваш объект живет дольше, потому что он будет в очереди финализатора и может получать события в это время (не уверен в этом).Может быть, это поможет

...