Консультирование HTML-элемента управления: когда мне следует вызвать DispEventUnadvise?

я использую DispEventAdvise в BHO для того, чтобы захватить onclick события определенного флажка. Вы можете увидеть код в мой предыдущий вопрос (хотя это не так актуально).

Для того, чтобы можно было позвонить DispEventUnadvise позже я сохраню ссылку на IHTMLElement Объект флажка.

  1. Когда мне следует позвонить DispEventUnadvise? Есть ли способ узнать, когда флажок уходит?

  2. Законно ли хранить ссылку на IHTMLElement объект? Я имею в виду, когда страница уничтожена, и все еще есть ссылка на объект этого флажка, что с ней происходит?

2

Решение

Ожидается, что вы не будете получать уведомления от источника события / точки подключения, когда вы больше не хотите получать события. При вызове, в частности, точка соединения освобождает указатель интерфейса приемника. Прежде чем не обращать внимания, точка подключения содержит ссылку и продлевает срок службы вашего объекта-получателя.

То есть, вы называете это в любое время, когда хотите отказаться, нет конкретного хорошего времени, когда вы должны это делать, кроме общих соображений.

Другая часть вопроса «когда флажок уходит», однако, не имеет прямого отношения. При подключении к точке подключения вы не получите уведомление об уходе. Законно удерживать указатель интерфейса, даже если вся страница исчезла: флажок, один или вместе с его владельцем, будет оставаться в завершающем состоянии до тех пор, пока не будут освобождены все внешние ссылки (включая вашу). Как часть безопасного завершения, когда страница / документ исчезает, он может лишить соединения точки соединения со своей стороны, потому что никакие события не будут следовать, и документ выполняет очистку, чтобы избежать циклических ссылок и утечек.

В вашем случае, я полагаю, ваш лучший выход — найти другое подходящее событие, чтобы увидеть, когда весь документ исчезнет, ​​и предположить, что флажок также исчезает. Другой [менее безопасный] вариант — наблюдать за объектом интерфейса приемника: как только его внешняя ссылка неожиданно освобождается точкой подключения, это означает, что его очистка и флажок исчезают.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]