2010-07-26 3 views
0

Je crée dynamiquement une organigramme dans Silverlight 2 en ajoutant beaucoup de conteneurs Grid à une toile. Chaque conteneur de la grille représente un nœud dans le graphique. Je capturais événements de clic pour les nœuds comme suit:Délégués à l'événement Silverlight

grid.MouseLeftButtonUp += new MouseButtonEventHandler(grid_MouseLeftButtonUp); 

De par sa conception, chaque événement de clic change l'apparence de l'arbre, donc sur la capture d'un événement click je reconstruis l'ensemble de l'arborescence org. Cela fonctionne bien pour deux ou trois clics, mais après que tout se bloque lorsque je clique sur un nœud (grille). Chaque fois que je reconstruis l'arbre-je effacer la toile de base en utilisant:

_canvasBase.Children.Clear(); 

Je me demande si je dois spécifiquement clairement tous les délégués de l'événement avant d'effacer tous les enfants de toile? Ou pourrait-il se produire autre chose pour provoquer le blocage?

+0

Découvrez cet article: [LeakEvent → WeakEvent] (http://blogs.microsoft.co.il/blogs/shimmy/archive/2012/02/01/weak-event-handler-for-silverlight.aspx) – Shimmy

Répondre

1

Oui, vous aurez une mauvaise mémoire de fuite si vous ne supprimez pas les gestionnaires d'événements.

+0

Merci - pouvez-vous conseiller sur la meilleure façon de supprimer tous les gestionnaires souscrits pour un uielement particulier? Dans le code, je ne saurai pas quels gestionnaires sont liés à chaque élément. – DEH