J'écris un plug-in pour un programme où j'ai besoin de suivre quand des objets natifs sont ajoutés, supprimés et édités dans le document actif. L'API a des événements qui sont déclenchés lorsque le document est modifié. Cependant, le programme ne suit pas lorsque les objets natifs changent réellement. Au lieu de cela, un changement d'objet est traité comme l'objet à supprimer puis immédiatement remplacé par un autre objet modifié avec le même ID. Ceci est fait de cette façon afin que le programme puisse garder une trace d'un enregistrement d'annulation.Comment puis-je effectuer le suivi de plusieurs événements?
Après quelques expériences que j'ai déterminé que les événements sont évoqués comme suit:
Un objet est ajouté: OnAddObject événement
Un objet est supprimé: OnDeleteObject événement
Un objet est modifié: OnReplaceObject Event-> OnDeleteObject Event-> OnAddObject Event
À l'heure actuelle, mon plug-in surveille uniquement les événements OnAdd et OnDelete dans lesquels il ajoute et supprime des instances de mon objet personnalisé depuis et vers une collection. Mais cela signifie aussi que chaque fois qu'un objet change, mon plugin supprime une réinitialisation d'un objet presque identique. Je préfère juste savoir que l'objet document a changé afin que mon objet personnalisé puisse être actualisé plutôt que complètement réinstancié. Comment mes méthodes qui sont abonnées aux événements OnDelete et OnAdd indiquent-elles que l'objet n'est pas réellement ajouté ou supprimé mais est remplacé parce qu'il a changé?
Je suppose que cela n'est pas possible, car les événements Ajouter/Supprimer se déclenchent avant les événements remplacés. – Zyphrax
Selon la question d'Eric, l'événement Replace se déclenche suivi de la commande Delete, suivie de Add, afin que la solution Johannes soit correcte, en tenant compte des problèmes de threading. –
Cette réponse est la plus proche de ma solution. Bien que je n'aie pas utilisé les variables Bool mais plutôt mis en cache l'ID de l'objet dans l'événement OnReplaceObject –