126 votes

Suppression de contrôles utilisateur WPF

J'ai créé une coutume WPF de contrôle de l'utilisateur qui est destiné à être utilisé par un tiers. Ma commande a un membre qui est jetable, et je tiens à vous assurer que sa méthode dispose obtiendrez toujours appelé une fois le contenant de la fenêtre/l'application est fermée. Cependant, UserControl n'est pas jetable. J'ai essayé la mise en œuvre de l'interface IDisposable et en vous abonnant à la Déchargé de l'événement, mais ni appelée lorsque la fermeture de l'application hôte. Si possible, je ne veux pas compter sur les consommateurs de mon contrôle d'oublier d'appeler un méthode dispose.

 public partial class MyWpfControl : UserControl
 {
     SomeDisposableObject x;

     // where does this code go?
     void Somewhere() 
     {
         if (x != null)
         {
             x.Dispose();
             x = null;
         }

     }
 }

La seule solution que j'ai trouvé jusqu'à présent est de vous abonner à la du Répartiteur ShutdownStarted événement. Est-ce raisonnable?

this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;

60voto

Ray Booysen Points 10606

Billet de blog intéressant ici :

http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-WPF-UserControl-ish.aspx

Il parle de s’abonner à Dispatcher_ShutDownStarted de disposer de vos ressources.

45voto

Ilia Barahovski Points 681

``événement se déclenche uniquement à la fin de l’application. Il convient d’appeler la logique disposing juste quand le contrôle est hors d’usage. En particulier, il libère des ressources lorsque le contrôle est utilisé plusieurs fois au cours de l’exécution de l’application. Donc solution ioWintest préférable. Voici le code :

15voto

Ade Miller Points 7750

Il faut être prudent en utilisant le destructeur. Ceci est appelé sur le thread finaliseur GC. Dans certains cas les ressources auxquelles votre libération peut ne pas aimer être relâché sur un thread différent de celui qu’ils ont été créés sur.

6voto

ioWint Points 579

Mon scénario est un peu différent, mais l'intention est la même, je voudrais savoir si le parent de la fenêtre de l'hébergement de mon contrôle utilisateur est en cours de fermeture/fermé comme Le point de vue(j'.e mon usercontrol) doit invoquer des présentateurs oncloseView pour exécuter certaines fonctionnalités et d'effectuer le nettoyage. ( bien que nous mettons en œuvre un modèle MVP sur WPF PRISME de l'application).

Je viens de comprendre que dans l'événement Chargé de l'objet usercontrol, je peux brancher ma ParentWindowClosing méthode de la fenêtre Parent de Clôture de l'événement. De cette façon, mon Usercontrol peut être conscient lorsque la fenêtre Parent est en cours de fermeture et d'agir en conséquence!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X