J'ai une simple application WPF à fenêtre unique qui contient des zones de texte et des boutons. Et j'utilise aussi NotifyIcon et DateTimePicker de Windows Forms dans la fenêtre WPF. Comment puis-je éliminer efficacement toutes les commandes?Quand appeler la méthode Dispose() dans l'application WPF
Répondre
Presque n'importe quoi dans WPF a une méthode Dispose
. La grande majorité des classes encapsule des informations purement gérées. Vous pouvez joindre un objet dans l'arborescence (par exemple, via une méthode Children.Add
) et vous pouvez le supprimer à nouveau - c'est ainsi que fonctionne la gestion d'état. Il ne correspond pas exactement au modèle IDisposable
, car une fois que vous avez supprimé un contrôle, vous pouvez l'ajouter à nouveau, tandis que Dispose
signifie toujours (bien que vous puissiez utiliser Dispose
pour le gérer en plus des méthodes Add
/Remove
).
A discussion about it on the Microsoft forums.
Il y a quelques choses qui devraient être IDisposable
mais ne sont pas, comme DispatcherTimer
, et il n'y a rien pour vous empêcher de mettre en œuvre IDisposable
sur vos propres classes. C'est à vous de composer le Dispose
; fondamentalement quand vous savez que vous n'allez plus utiliser l'objet.
Pour Window
vous appelez simplement Close
pour le fermer, et WPF s'occupe de tout le reste.
Je dirais que la même règle s'applique dans les applications WPF comme dans toutes les autres applications .NET: si un objet implémente IDisposable
, vous devez appeler Dispose
lorsque vous avez fini de l'utiliser. Si vous chargez et déchargez dynamiquement des contrôles et qu'ils n'implémentent pas IDisposable
, il suffit de définir des références à null
(et de détacher les gestionnaires d'événements) pour que le garbage collector fasse son travail.
Si ce contrôle fait partie de IContainer (c'est le modèle commun dans .NET) que vos contrôles ont juste besoin d'implémentation de IDisposable. Ainsi, Dispose() sera appelé automatiquement quand il est temps approprié.
Adhérer à CA1001: Laisser le type propriétaire implémenter IDisposable.
Renoncez à l'ancienne version de Windows Forms que tous les contrôles sont IDisposable. Mettre en œuvre et appeler Dispose
vous-mêmes.
sealed partial class MainWindow : IDisposable {
readonly IDisposable disposable;
public MainWindow() {
disposable = ...
}
public void Dispose() {
disposable.Dispose();
}
protected override void OnClosed(EventArgs e) {
Dispose();
base.OnClosed(e);
}
}
- 1. Quand devrions-nous appeler la méthode connection.rollback()?
- 2. Comment étendre la méthode Dispose d'un WinForm?
- 3. ASP MVC: Quand IController Dispose() est appelé?
- 4. Quand appeler WebResponse.Close()
- 5. Pourquoi appeler Dispose() sur BinaryReader entraîne une erreur de compilation?
- 6. WPF ListBox qui dispose ses éléments horizontalement
- 7. Quand dois-je appeler Naming.unbind()?
- 8. Comment puis-je appeler la méthode 'log()' de la méthode beforeSave() dans un modèle dans CakePHP?
- 9. Appeler une méthode utilisant la réflexion
- 10. Problème appeler une fonction quand il est dans un .lib
- 11. Quand utiliser l'activateur et quand utiliser la méthode d'usine?
- 12. La fermeture d'une connexion de base de données dans la méthode Dispose est-elle correcte?
- 13. Comment substituer la méthode pour appeler la méthode de la superclasse de la superclasse?
- 14. Puis-je appeler une méthode statique dans une autre méthode?
- 15. Appeler méthode de classe de base de la méthode surchargée dans la sous-classe
- 16. Comment quitter Méthode Quand Ne pas utilisé cette méthode dans la méthode
- 17. Dispose sur Chaîne^dans CLI?
- 18. CodeDom - Appeler une méthode générique
- 19. SQL 2005 sp_GetAppLock --- Quand appeler sp_ReleaseAppLock?
- 20. Dans l'implémentation de la méthode Dispose (bool), ne devrait-on pas mettre les membres à zéro?
- 21. Appeler un groupe de méthode
- 22. COMException quand j'utilise un popup dans WPF
- 23. Comment appeler une méthode de service Web?
- 24. SQL 2005 sp_GetAppLock --- Quand appeler sp_ReleaseAppLock?
- 25. Appeler une méthode de haricot d'entreprise
- 26. Comment implémenter Dispose dans un objet COM
- 27. Intéressant comportement "Dispose"
- 28. Composant Firefox XPCOM - Autorisation refusée pour appeler la méthode UnnamedClass
- 29. Balise d'ancrage onclick pour appeler un code derrière la méthode
- 30. Méthode partagée ne pas appeler Constructeur partagé