IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Problème de libération des ressources


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Problème de libération des ressources
    Bonjour à tous,

    Je développe actuellement une petite application de messagerie instantanée (un peu du genre Windows Live Messenger). La librairie utilisée pour la communication s'appelle agsxmpp (protocole XMPP).

    Decription:
    J'ai la fenêtre principale, nommée frmPrincipale qui contient la liste de mes contacts avec leurs statuts (absent/occupé...). Afin de pouvoir mettre à jour correctement les statuts, cette classe est abonné à un événement de la librairie agsxmpp appelé OnPresence
    Quand je double clic sur un contact dans la liste de la fenêtre principale, une nouvelle fenêtre (appelée frmChat et non modale) s'ouvre et me permet de discuter avec ce contact. Cette classe est aussi abonnée à l’événement OnPresence afin de signaler tout changement de statut de l'interlocuteur. (Par exemple: M. Dupond est hors ligne).

    Problème:
    Lorsque je ferme la fenêtre de discussion frmChat (avec la croix rouge de Windows) ou bien par this.Close() et que l’interlocuteur vient à changer de statut par la suite, et bien l'évélement OnPresence est déclenché dans la fenêtre de discussion, alors que celle-ci est fermée! Comme si les ressources allouées à cette fenêtre n'étaient pas correctement libérées.

    Si jamais vous voulez du code, pas de problème! Je n'en ai pas posté car je pense que le problème est compréhensible plus facilement avec des explications comme celles-ci.

    Merci pour votre aide,

    Bonne journée

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Lorsque tu ouvres ta fenêtre tu fais un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    malibrairie.OnPresence += MyEventHandler;
    Il suffit que tu fasses le contraire à la fermeture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    malibrairie.OnPresence -= MyEventHandler;

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Merci de m'avoir répondu,

    J'avais déjà essayé cette solution mais je viens de me rendre compte que j'avais deux événements sur la fenêtre qui rentraient en conflit: l'événement this.Closing et this.FormClosing et qui empêchaient la bonne utilisation du désabonnement à l'événement. Maintenant ça fonctionne!

    Petite question: en fermant la fenêtre de discussion, l'événement ne devrait-il pas être détruit automatiquement?

    Merci encore pour votre rapidité,

    Bonne journée,

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par willythe88 Voir le message
    Petite question: en fermant la fenêtre de discussion, l'événement ne devrait-il pas être détruit automatiquement
    Malheureusement non et c'est une fuite de mémoire bien connue dans tous les développements
    En théorie, il faudrait à chaque fois qu'il y ait un abonnement faire le désabonnement qui va avec.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    J'aurai appris des choses aujourd'hui et j'essayerai de ne pas me faire "avoir" la prochaine fois!

    Merci pour toutes ces infos!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel] Libération des ressources Excel+lenteur d'exectution
    Par zalalus dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 12/11/2007, 09h06
  2. Réponses: 2
    Dernier message: 29/09/2007, 13h56
  3. Réponses: 4
    Dernier message: 20/04/2007, 15h19
  4. libération des ressource d'une table
    Par dracula2000 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/06/2006, 18h06
  5. Réponses: 13
    Dernier message: 03/04/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo