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 thread, méthode ne se lance pas !


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Problème thread, méthode ne se lance pas !
    Bonjour tout le monde,

    voici mon problème :

    J'ai un service qui instancie une classe sur demande, sur cette instance je lance une méthode qui consiste simplement a cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public static void Balloon()
            {
                NotifyIcon ni = new NotifyIcon();
                ni.Icon = Icon.ExtractAssociatedIcon(@"c:\Icon.ico");
                ni.Visible = true;
                ni.BalloonTipClicked += titleClick;
                ni.Click += textClick;
                ni.BalloonTipShown += notifyWindow;
                ni.BalloonTipClosed += titleClick;
                ni.ShowBalloonTip(10000, "titreeeeeeeeeeeeeeeeeeeeeeeeeeeee", "texteeeeeeeeeeeeeeeeeeeeeee", ToolTipIcon.Info);
            }
    Le probleme est que je peut cliquer n'importe où ( aussi bien sur le balloon, sur l'icone ) rien ne se produit ( alors que la méthode appelé lors du show ballon devrait être lancée automatiquement ! ).

    Je soupçonne un problème de thread mais n'arrive pas à le résoudre, merci de m'aider en ce sens pour que mes méthodes se lance bien quand je clique sur le balloon par exemple.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ton prog est un service windows ? en général un service n'interagit pas avec le bureau, c'est peut-être l'origine du problème...

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Non la n'est pas le problème puisque je l'est autorisé a interagir avec et que si je ne l'autorise pas l'icône du systray n'apparaît pas alors que la tout fonctionne parfaitement sauf qu'aucune action n'est déclenché après un click !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il y a aussi une fenêtre pour l'interface de ton service, ou seulement la NotifyIcon ? Je crois que la NotifyIcon a besoin d'un handle de fenêtre pour fonctionner...

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Non tout fonctionne parfaitement, l'affichage est bon c'est juste que cliquer ne conduit a rien !

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ca répond pas à ma question...
    L'icone et le menu s'affichent peut-être correctement, mais les évènements comme le clic sont transmis par des messages Windows, donc si tu n'as pas de fenêtre tu ne peux pas les recevoir

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    L'infobulle n'est t'elle pas considérer comme une fenêtre ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par dIwAmIb Voir le message
    L'infobulle n'est t'elle pas considérer comme une fenêtre ?
    je ne crois pas... en fait je suis même presque sûr que non

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    ah ok !! donc le problème viendrai du fait que mon infobulle n'est pas une form donc il n'y a rien a cliquer dessus !

    Mais créer une form par dessus n'est t'il pas inutil puisque les méthodes d'appel de méthode lors d'un clique existe déjà , logiquement cela est déjà gérer ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par dIwAmIb Voir le message
    ah ok !! donc le problème viendrai du fait que mon infobulle n'est pas une form donc il n'y a rien a cliquer dessus !
    non, ce n'est pas tout à fait ça : Windows transmet les évènements de l'info-bulle à l'application en envoyant des messages à la fenêtre principale, mais comme tu n'as pas de fenêtre du tout ça ne marche pas

    Citation Envoyé par dIwAmIb Voir le message
    Mais créer une form par dessus n'est t'il pas inutil puisque les méthodes d'appel de méthode lors d'un clique existe déjà , logiquement cela est déjà gérer ?
    Non, il ne faut pas créer de form par dessus l'info-bulle bien sûr... Mais il faut que tu crées une fenêtre pour ton application. Rien ne t'oblige à l'afficher mais il faut qu'elle existe.

    Note que tout ce que je raconte là est un peu théorique, je voudrais faire le test mais là j'ai pas vraiment le temps...

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    ok ok je vois le truc merci a toi je vais essayer !

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bon, j'ai fait le test, et je crois que j'ai dit une connerie... désolé

    En fait il n'y a pas besoin d'avoir une fenêtre. Par contre, il faut que le thread de traitement se libère de temps en temps pour traiter la boucle de messages, en appelant Application.DoEvents.

    Le code suivant (dans une appli console) ne fonctionne pas (les évènements BalloonTipClicked et BalloonTipClicked ne sont jamais exécutés), parce qu'on ne traite jamais les messages en attente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private static void TestNotifyIcon()
            {
                System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon();
                notifyIcon.Icon = System.Drawing.SystemIcons.Information;
                notifyIcon.BalloonTipClicked += new EventHandler(notifyIcon_BalloonTipClicked);
                notifyIcon.BalloonTipClosed += new EventHandler(notifyIcon_BalloonTipClosed);
                notifyIcon.Visible = true;
                notifyIcon.ShowBalloonTip(5000, "Coucou", "Hello world", System.Windows.Forms.ToolTipIcon.Info);
                while (true)
                {
                    System.Threading.Thread.Sleep(100);
                }
            }
    Par contre, celui-ci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private static void TestNotifyIcon()
            {
                System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon();
                notifyIcon.Icon = System.Drawing.SystemIcons.Information;
                notifyIcon.BalloonTipClicked += new EventHandler(notifyIcon_BalloonTipClicked);
                notifyIcon.BalloonTipClosed += new EventHandler(notifyIcon_BalloonTipClosed);
                notifyIcon.Visible = true;
                notifyIcon.ShowBalloonTip(5000, "Coucou", "Hello world", System.Windows.Forms.ToolTipIcon.Info);
                while (true)
                {
                    System.Windows.Forms.Application.DoEvents();
                }
            }

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Ah ok ?! , il suffisait de lancer la méthode DoEvents !!!

    simple une fois connu !

    Merci a toi.

    TOPIC A CLORE

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

Discussions similaires

  1. Thread qui ne se lance pas
    Par pommefrite dans le forum Général Python
    Réponses: 3
    Dernier message: 25/06/2014, 19h46
  2. Problème La méthode nommée n'existe pas.
    Par superxou dans le forum ActionScript 1 & ActionScript 2
    Réponses: 7
    Dernier message: 09/06/2008, 22h43
  3. Thread qui ne se lance pas
    Par davels dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2007, 18h05
  4. Thread qui ne se lance pas
    Par barbiche dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 20/03/2007, 16h06
  5. Mysql ne se lance pas problème de socket
    Par Riko dans le forum Installation
    Réponses: 5
    Dernier message: 05/02/2004, 09h28

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