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 :

Problème d'evenements qui ne se déclenchent pas


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 26
    Par défaut Problème d'evenements qui ne se déclenchent pas
    Bonjour,

    Je me casse les dents sur un problème d’événement.

    J'ai une appli qui contient un gestionnaire de clients TCP qui crée X clients en fonction des besoins.
    Chaque client remonte par événement au gestionnaire de clients quand il est connecté.
    Le gestionnaire remonte ensuite, toujours par évènement, à la form principale qu'un client s'est connecté.

    Client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //declaration de l'évenement dans le client
    public event StringEventHandler Sync;
     
            protected virtual void OnSync(StringEventArgs e)
            {
                StringEventHandler handler = Sync;
                if (handler != null)
                {
                    handler(this, e);
                }
            }
     
    ...
    OnSync(e); //declenche l'évenement de connexion
    ...
    gestionnaire de clients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    //Déclaration de l'évenement de connexion d'un client
            public event StringEventHandler TCPSync;
     
            protected virtual void OnSync(StringEventArgs e)
            {
                StringEventHandler handler = TCPSync;
                if (handler != null)
                {
                    handler(this, e);
                }
            }
     
    //Dans le code de creation d'un nouveau client : 
    client.Sync += _Sync;
     
    //Executé quand un client se connecte
            void _Sync(object sender, StringEventArgs e)
            {
                //Declenche un nouvel evenement
                OnSync(e);
            }
    Dans la form principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TCPManager.TCPSync+=_Sync;
     
            void _Sync(object sender, StringEventArgs e)
            {
                tbConsole.Text = "Sync:";
                tbConsole.Text += e.Text + "\r\n";
            }
    Lors d'une connexion d'un client l'evement remonte correctement jusqu'au gestionnaire de client mais il ne remonte pas jusqu'à la form.
    Quelqu'un à une idée pourquoi ?

    Merci
    A+
    JP

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,

    le plus simple: débugue ton appli. (pas au sens d'enlever les bugs; au sens de l'exécuter en mode debug, pas à pas)

    Mets un point d'arrêt sur la ligne où tu t'abonnes à l'event
    Mets un point d'arrêt dans la méthode émetrice
    Mets un point d'arrêt dans la méthode abonnée

    Ca te permettra de localiser précisément ce qui va pas.

    Raison probable: ton événement est émis dans un thread métier, et donc l'affectation de la propriéié Text de ton texbox aussi. Or il n'est pas possible de modifier l'état d'un contrôle lorsque l'on n'est pas dans le thread UI, il faut passer par Invoke

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Or il n'est pas possible de modifier l'état d'un contrôle lorsque l'on n'est pas dans le thread UI
    Pour être précis : dans le thread qui l'a instancié.

Discussions similaires

  1. Problème de DIV qui ne s'étendent pas
    Par sorry60 dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 28/06/2007, 15h49
  2. Problème de fenêtre qui ne se détruit pas
    Par Okydor dans le forum wxPython
    Réponses: 7
    Dernier message: 04/08/2006, 10h42
  3. [SWING] Evenement qui ne se déclenche pas
    Par LordBob dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 15/06/2006, 15h57
  4. [Struts] Problème d'ActionForm qui ne s'instancie pas
    Par vallica dans le forum Struts 1
    Réponses: 35
    Dernier message: 10/04/2006, 22h39

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