Quand puis-je disposer d'un contrôle WPF IDisposable, par exemple? WindowsFormsHost?
Le contrôle WPF WindowsFormsHost hérite de IDisposable.
Si j'ai un complexe WPF visuelle de l'arbre contenant certains de ces contrôles de quel événement ou de la méthode puis-je utiliser pour appeler IDispose lors de l'arrêt?
source d'informationauteur morechilli
Vous devez vous connecter pour publier un commentaire.
Dans le cas de l'arrêt de l'application il n'y a rien que vous devez faire pour disposer correctement des WindowsFormsHost. Depuis qu'il tire de HwndHost l'élimination est traitée lorsque le Répartiteur est en arrêt. Si vous utilisez un Réflecteur, vous verrez que lorsque HwndHost est initialisé, il crée un WeakEventDispatcherShutdown.
Si vous l'utilisez dans une boîte de dialogue du mieux que je peux suggérer, c'est de remplacer OnClosed et de les éliminer de votre Hôte, sinon le HwndHost va traîner jusqu'à ce que le Répartiteur est à l'arrêt.
Un moyen simple de tester lors de l'éliminer est appelée consiste à dériver une classe personnalisée de WindowsFormsHost et jouer avec les différentes situations. Placez un point d'arrêt en disposer et de voir quand il est appelé.
Bâtiment de Todd réponse je suis venu avec cette solution générique pour n'importe quel contrôle WPF qui est hébergé par une Fenêtre et veulent à garantir l'élimination lorsque la fenêtre est fermée.
(Évidemment, si vous pouvez éviter d'hériter de IDisposable faire, mais parfois vous ne pouvez pas)
Dispose est appelé lorsque le premier de la fenêtre parent de la hiérarchie est fermé.
(Amélioration Possible - pour changer le cas de la manipulation d'utiliser la faiblesse du modèle)
Contrôles WPF n'implémente pas l'interface IDisposable, parce que ils n'ont rien à jeter (Pas de poignées à nettoyer, pas de mémoire non managée à la libération). Tout ce que vous devez faire est de vous assurer que vous n'avez pas de références aux commandes et à la GC nettoyer.
Donc WPF utilise la faiblesse des motifs d'événement pour s'assurer que les contrôles peuvent être des ordures collectées. C'est le schéma que vous avez besoin pour mettre en œuvre afin d'assurer le nettoyage, ne pas IDisposable.
Vous n'avez pas besoin de disposer de contrôles lors de la fermeture d'un formulaire, l'API le fera pour vous automatiquement si le contrôle est dans l'arborescence visuelle de la forme ( comme un enfant de la forme ou une autre de contrôle dans le formulaire)