Conseiller un contrôle HTML: quand dois-je appeler DispEventUnadvise?

J’utilise DispEventAdvise dans un BHO afin de capturer les événements onclick d’une case à cocher spécifique. Vous pouvez voir le code dans ma question précédente (bien que ce ne soit pas pertinent).

Afin de pouvoir appeler DispEventUnadvise ultérieurement, je garde une référence à l’object IHTMLElement de la case à cocher.

  1. Quand devrais-je appeler DispEventUnadvise ? Y a-t-il un moyen de savoir quand la case à cocher s’en va?

  2. Est-il même légal de garder une référence à l’object IHTMLElement ? Je veux dire, quand la page est détruite et qu’il y a toujours une référence à l’object de cette case à cocher, que se passe-t-il?

Vous êtes tenu de ne pas recevoir d’avis de source d’événement / de connexion lorsque vous ne souhaitez plus recevoir d’événements. L’appel, en particulier, fait que le sharepoint connexion libère votre pointeur d’interface de récepteur. Avant de déconseiller, le sharepoint connexion contient une référence et prolonge la durée de vie de votre object collecteur.

C’est-à-dire que vous appelez cette option chaque fois que vous souhaitez vous désinscrire, il n’y a pas de moment propice pour le faire, à part des considérations générales.

L’autre partie de la question “Quand la case à cocher disparaît” n’est cependant pas liée directement. Étant connecté au sharepoint connexion, vous ne recevez pas de notification de “départ”. Il est légal de conserver un pointeur d’interface même si toute la page a disparu: la case à cocher, seule ou avec son propriétaire, restra en état de fin jusqu’à ce que toutes les références externes (y compris la vôtre) soient libérées. En tant que partie intégrante de la terminaison sécurisée, lorsque la page / le document disparaît, il est possible que des connexions de sharepoint connexion lui soient retirées car aucun événement ne suivra et que le document effectue un nettoyage complet pour éviter les références circulaires et les fuites.

Dans votre cas, je suppose que votre meilleure solution consiste à trouver un autre événement approprié pour voir quand tout le document disparaît et pour supposer que la case à cocher disparaît également. Une autre option [moins sûre] consiste à surveiller votre object d’interface de récepteur: une fois que sa référence externe est libérée de manière inattendue par sharepoint connexion, cela signifie que son nettoyage et sa case à cocher disparaissent.