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 :

Thread execute au demarrage d'une fenetre


Sujet :

Windows Forms

  1. #1
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut Thread execute au demarrage d'une fenetre
    Salut

    j'ai un thread et j'aimerais le lance au lancement d'un fenetre, pour pour affiche des message provenant du thread ..

    Ou dois place le lancement du thread (FormLoad : la fenetre ne s'affiche pas) ?
    Et comment communique avec le thread ?
    (j'ai essaye avec un while (thread.isAlive) et des getter du thread mais apparement cela ne marche pas )

    thx@+

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Tu as l'évènement Shown qui est déclenché lorsque la fenêtre est affichée.

    Et comment communique avec le thread ?
    Que veux-tu savoir ?

    (j'ai essaye avec un while (thread.isAlive) et des getter du thread mais apparement cela ne marche pas )
    Qu'est ce qui ne marche pas ? IsAlive renvoie tout le temps false ?
    Si oui, as tu pensé à faire un Start du thread
    Si non, est-ce que la méthode qu'exécute le thread fait bien une boucle infinie ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  3. #3
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par Goldar
    Tu as l'évènement Shown qui est déclenché lorsque la fenêtre est affichée.


    Que veux-tu savoir ?


    Qu'est ce qui ne marche pas ? IsAlive renvoie tout le temps false ?
    Si oui, as tu pensé à faire un Start du thread
    Si non, est-ce que la méthode qu'exécute le thread fait bien une boucle infinie ?
    merci pour le shown ... y a t il qqpart dans la doc ou l'on peut voir l'enchement des evenements lorsqu 'une fenetre est cree ?

    Le thread est bien lance ... sauf que apparement mes valeurs qu'il recupere ne change pas alors que dans le thread je les fais evoluer ...

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Quelles sont ces valeurs ?
    Des variables globales à ta form, locales à la méthode, etc...

    Pour ce qui est de l'ordre des évènements, je t'avoue que je me rappelle plus où j'avais vu ça :s
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  5. #5
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par Goldar
    Quelles sont ces valeurs ?
    Des variables globales à ta form, locales à la méthode, etc...

    Pour ce qui est de l'ordre des évènements, je t'avoue que je me rappelle plus où j'avais vu ça :s
    Ce sont des variables qui sont dans la classe qui gere le thread qui sont en privees et j'y accede par une fonction en public ...

  6. #6
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    C'est pas logique que ton Thread modifie les valeurs comme tu dis et que en dehors de ton Thread, tu ne saches pas lire les modifications...

    Peut être quelques bouts de codes s'imposent ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  7. #7
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Ok pas de prob , mais j'ai pas le code sur moi ...

    Est ce qu'il n'y auras pas un probleme d'affichage si le changement de valeur est trop rapide ?

  8. #8
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par Seth77
    Ok pas de prob , mais j'ai pas le code sur moi ...

    Est ce qu'il n'y auras pas un probleme d'affichage si le changement de valeur est trop rapide ?
    Difficile à dire, tu procèdes comment pour regarder l'évolution de la valeur en question ?
    • En mode pas à pas en faisaint des watch sur les variables qui t'intéressent ?
    • Ou bien un mécanisme qui s'exécute sans arrête pour te donner l'état de ta variable dans un textbox de ta fenêtre par exemple ? si c'est le cas, comment t'y prends tu pour aller chercher sans arrête la valeur de ta variable ?
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  9. #9
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    J'avais essaye comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (monThread.isAlive(){
        this.text = monThread.getval();
    }

  10. #10
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Bizarre tout ça :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     while (monThread.isAlive(){
        this.text = monThread.getval();
    }
    Qui exécute ce code ?
    > Ta fenêtre avec un timer ou autre ?
    > Ton Thread...

    >> Si c'est ton thread et que tu es avec vs2005 (pas sûr pour le 2003), un thread ne peut pas agir sur des composants dont il n'est pas propriétaire... Text appartient au thread qui gère la fenêtre ainsi que tous les composants qui sont sur ta fenêtre. Il faut pour celà passer par des déléguée... Cependant je m'éloigne du sujet principal donc passons ce point

    Pour ce qui est de monThread.getval();

    C'est quoi getval() ? une méthode à toi ?
    Plus précisèment, monThread est un objet personnalisé qui englobe un Thread ??
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  11. #11
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par Goldar
    Bizarre tout ça :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     while (monThread.isAlive(){
        this.text = monThread.getval();
    }
    Qui exécute ce code ?
    > Ta fenêtre avec un timer ou autre ?
    > Ton Thread...

    >> Si c'est ton thread et que tu es avec vs2005 (pas sûr pour le 2003), un thread ne peut pas agir sur des composants dont il n'est pas propriétaire... Text appartient au thread qui gère la fenêtre ainsi que tous les composants qui sont sur ta fenêtre. Il faut pour celà passer par des déléguée... Cependant je m'éloigne du sujet principal donc passons ce point

    Pour ce qui est de monThread.getval();

    C'est quoi getval() ? une méthode à toi ?
    Plus précisèment, monThread est un objet personnalisé qui englobe un Thread ??
    C'est le code que j'ai mis dans une fenetre (form.load())
    Je suis sous VS Studio Express.
    Oui il s'agit bien d'une fontion a moi qui est dans une classe qui englobe le thread.

  12. #12
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Dans ce cas, 2 possibilités avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     while (monThread.isAlive(){
        this.text = monThread.getval();
    }
    Soit isAlive renvoit false et tu sors tout de suite de ton Form_Load...
    => Pas de changement de la valeur

    Soit isAlive renvoit sans arrêt True et dans ce cas, ça boucle et ton application se fige
    => PAs de changement de la valeur non plus
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  13. #13
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par Goldar
    Dans ce cas, 2 possibilités avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     while (monThread.isAlive(){
        this.text = monThread.getval();
    }
    Soit isAlive renvoit false et tu sors tout de suite de ton Form_Load...
    => Pas de changement de la valeur

    Soit isAlive renvoit sans arrêt True et dans ce cas, ça boucle et ton application se fige
    => PAs de changement de la valeur non plus


    Pourquoi elle devrait se figer ? elle reste dans la boucle tant que le thread tourne non ? et des qu'il a finit isAlive passe a false non ?

  14. #14
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Oui mais si ton thread dure 10 minutes, ta boucle dans formload va durer 10 minutes aussi. Donc la fenêtre va se figer pendant 10 minutes tant que la méthode formload ne sera pas finie.

    Ou bien là, tu vas me dire que ton thread fait un court traitement et se finit tout de suite... Dans ce cas, ce qui peut se passer, c'est que :
    * tu démarres ton thread
    * Celui s'exécute tout de suite jusqu'au bout
    * FormLoad récupère la main et teste si ton thread est vivant, ce qui n'est pas le cas donc tu n'exécutes pas this.Text = monthread.getval();
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  15. #15
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    oui mon thread dure longtemps ... mais alors comment faire ?
    cf : http://www.developpez.net/forums/sho...d.php?t=241945

    j'aimerais montrer la progression du traitement dans la fenetre ....

  16. #16
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par Seth77
    oui mon thread dure longtemps ... mais alors comment faire ?
    cf : http://www.developpez.net/forums/sho...d.php?t=241945

    j'aimerais montrer la progression du traitement dans la fenetre ....
    Alors pour ça, on est parti pour les explications des déléguées :p

    Pour ton cas où tu veux afficher sur la fenêtre l'évolution du traitement de ton thread, c'est à ton thread d'appeler une méthode qui va permettre de laisser la main au thread de ta fenêtre pour afficher quelque chose dessus.

    La méthode en question est Invoke.
    Cette méthode demande en paramètre un délégué qui lui même demande en paramètre la méthode à exécuter. C'est ce mécanisme qui va permettre au thread de la fenêtre d'avoir le contrôle.

    Si tu veux passer des paramètres, Invoke peut recevoir un 2e paramètre qui n'est autre qu'une suite d'object représentants les paramètres à passer à la méthode finale.

    Passons à la pratique maintenant...

    Tu dois créer un délégué comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public delegate myDelegate(int myParam);
    Et sa méthode qu'il devra exécuter (comme tu peux le remarquer, elle renvoit la même chose et reçoit les même paramètres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void myMethodToProcess(int myParam)
    {
        Text = myParam.ToString();
    }
    Maintenant, ton thread n'a plus qu'à appeler la méthode myMethodToProcess via Invoke comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (NewDirectory == true)
    {
       Count++;
       this.Invoke(new myDelegate(myMethodToProcess)), Count);
    }
    Si tu voulais faire directement dans ton thread Text = "Test";, tu aurais une exception te disant qu'il y a cross-threading ou quelque chose dans le genre... C'est pourquoi on a recourt à ce mécanisme.
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  17. #17
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    ok merci ...pas tout compris ..faut que j'essaie ...

    Tout cela dans la classe du thread ?

  18. #18
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par Seth77
    ok merci ...pas tout compris ..faut que j'essaie ...

    Tout cela dans la classe du thread ?
    Oui tu peux.
    N'hésite pas si tu as des problèmes quand tu essayeras.
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  19. #19
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    ok merci !

  20. #20
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Slu

    j'ai essaye ...mais je ne vois pas vraiment parmi les elements que tu me donnes quelles sont ceux qui sont dans le thread et ceux dans la fenetre ..


    thx @+

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2010, 13h58
  2. executer un main() dans une fenetre
    Par elric63 dans le forum Windows
    Réponses: 1
    Dernier message: 09/06/2009, 14h58
  3. Réponses: 2
    Dernier message: 02/01/2008, 15h31
  4. [Debutant] Un thread qui dessine sur une fenetre ???
    Par Spartan03 dans le forum OpenGL
    Réponses: 6
    Dernier message: 05/04/2006, 20h19
  5. [Thread] laisser une fenetre s'afficher
    Par parisjohn dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 25/08/2004, 15h05

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