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

C# Discussion :

[C#] Contrôler les méthodes abonnées à un évènement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 13
    Par défaut [C#] Contrôler les méthodes abonnées à un évènement
    Bonjour,

    Je voudrais savoir s'il était possible de savoir, via du code C#, si telle ou telle méthode est abonnée à tel ou tel évènement.
    Pour être un poil plus concret, j'aimerais abonner une méthode à un évènement à un moment bien précis de l'execution de mon code, mais uniquement si cette méthode n'est pas déja abonnée à cet évènement (auquel cas elle s'execute 2 fois lorsque l'évènement se produit, ce que je ne souhaite pas).
    Comment faire ?

    Merci d'avance

  2. #2
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Bonjour,

    soit l'evenement suivant:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    public event EventHandler MyEvent;

    La listes des délégués abonnés à l'évenements MyEvent est obtenu par la méthode:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Delegate[] MyEvent.GetInvocationList();

    De plus le délégué possède l'attribut:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Reflection.MethodInfo delegate.Method;

    Tu peux donc parcourir chaque délégué de la liste retourné par la méthode GetInvocationList et vérifier avec l'attribut Method si la méthode est déjà abonnée à cet évenement.

    Bye

  3. #3
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 13
    Par défaut
    Merci pour ta réponse

    L'évènement en question n'est pas un évènement que j'ai défini moi-même mais il s'agit de l'évènement DocumentCompleted du composant WebBrowser qui ne semble pas disposer de la méthode GetInvocationList().

    Je souhaiterais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ( /* La méthode AddToHistory n'est pas abonnée à l'évènement myWebBrowser.DocumentCompleted */ )
        myWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(AddToHistory);
    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myWebBrowser.DocumentCompleted.GetInvocationList();
    semble incorrect.

  4. #4
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 13
    Par défaut
    Pas d'idée ?

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    La méthode GetInvocationList() ne s'applique pas à un événement mais à un délégué, c'est pour ça que ca ne fonctionne pas comme tu essayes de faire

    Par contre, je ne sais pas s'il est possible de récupérer le délégué associé à un événement pour faire ce que tu souhaites.

    Néanmois, tu peux désabonner la méthode avant de l'abonner, histoire de ne pas la mettre 2 fois. Désabonner une méthode non abonnée ne lève pas d'exception donc aucun risque de ce côté. Je ne sais pas si ca te suffiras par contre

  6. #6
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 13
    Par défaut
    Impeccable, ça fonctionne.

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/02/2008, 00h57
  2. Contrôler les cases à cocher
    Par benny7 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/08/2005, 16h26
  3. [EJB2.1 Entity] [BMP] les requetes doivent-elles se trouver directement dans les méthodes ?
    Par webspeak dans le forum Java EE
    Réponses: 2
    Dernier message: 24/03/2005, 08h34
  4. [Interface] Appeller toutes les méthodes héritées d'un class
    Par thibaut.d dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2005, 08h42
  5. Utiliser les méthodes des boutons crées en rafale.
    Par kabouns dans le forum Composants
    Réponses: 8
    Dernier message: 03/12/2004, 10h48

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