2010-11-18 3 views
2

Je me bats avec l'ancien "Erreur lors de la création de la poignée de la fenêtre". Mon application a une zone centrale qui héberge le contrôle sur lequel l'utilisateur travaille actuellement. Lorsque l'utilisateur charge un nouveau contrôle, je détruis l'ancien. Ou au moins j'essaie de le faire. Quand je lance le gestionnaire de tâches, je vois avec horreur que le nombre d'objets GDI ne diminue pas quand un nouveau contrôle est chargé. C'est ce que je fais pour essayer de tuer un contorl dont j'ai fini. Le compteur montre un nombre énorme à la fin, ce qui semble à peu près correct, mais les objets GDI dans le Gestionnaire des tâches restent à peu près les mêmes, jusqu'à ce qu'il atteigne 10 000, puis tout s'écroule.Erreur lors de la création de la poignée de la fenêtre

private void RecursivelyKillYourself(Control C) { 
     if (C.Controls != null && C.Controls.Count > 0) { 
      List<Control> Controls = C.Controls.OfType<Control>().ToList(); 
      C.Controls.Clear(); 
      Controls.ForEach(c_inner => RecursivelyKillYourself(c_inner)); 
     } else { 
      C.Dispose(); 
      num++; 
     } 
    } 

EDIT

fixe - dois assurez-vous de créer infobulles correctement. En outre, comme un commentateur l'a souligné, cette méthode récursive longue et ridicule est inutile. Juste un simple Dispose fera l'affaire.

mauvaise

(new SMcMaster.TabOrderManager(this)).SetTabOrder(SMcMaster.TabOrderManager.TabScheme.AcrossFirst); 

bonne

ToolTip T = new ToolTip(); 
T.SetToolTip(btnAddPropertyInvoice, "Add Properties"); 
components.Add(T); 
+1

N'est-il pas suffisant d'appeler simplement 'Dispose' sur le contrôle avec lequel vous travaillez? Le contrôle doit disposer de ses enfants automatiquement. En supposant, bien sûr, que le contrôle a été correctement écrit. –

+0

Si vous avez des contrôles personnalisés et que vous supprimez Dispose ou, mieux encore, que vous ne réalisez pas l'élimination supplémentaire nécessaire dans ces contrôles, vous pourriez vous retrouver dans cette situation. Avez-vous vérifié le comportement réel de Dispose dans les types de contrôle personnalisés ... s'ils existent ...? Bon article sur Dispose ... http: //blogs.msdn.com/b/jfoscoding/archive/2005/08/12/450835.aspx –

+0

Je créais mal mes infobulles, qui n'étaient pas disposées - voir edit. Merci pour vos réponses –

Répondre

1

Vérifiez que vous abordez Dispose correctement.

Questions connexes