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 + textBox


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut Thread + textBox
    Bonjour,

    J'ai créer un applic en c# qui permet de lancer les services oracles, le problèmes, est que j'aimerais afficher dans une texteBox l'etat du service( démarré arrêté, etc.) j'ai donc penser a lancer un thread qui testerait en permanence l'état des services, et qui lorsque il détecterait un changement changerais la textebox, mais je ne parviens pas à accéder à mes textbox dans mon thread, comment dois-je faire afin de réaliser cela?

    d'avance merci

  2. #2
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    ou alors tu peux envoyer un event qd tu change d'etat qui change la valeur de la textbox, non ?

  3. #3
    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
    Les contrôles ne peuvent pas être modifiés en dehors du thread principal de la fenêtre à laquelle ils appartiennent. La propriété InvokeRequired de la form indique si tu es dans le bon thread. Si elle renvoie false, ça veut dire que tu es dans un autre thread, et donc au lieu de faire directement machin.Text = truc, tu dois passer par laForm.BeginInvoke(...).

    Donc : cherche dans la doc de Form.InvokRequired et Form.BeginInvoke.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut
    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
    23
    24
    25
    26
    fonction_thread        //code qui tourne dans ton thread
    {
    
    public event System.EventHandler nom_event; //au moment ou tu veux rafraichir: nom_event.Invoke(null, null);
    } fonction_winformsprincipale //code de ta winform {
    //inscrire l'evenement: thread.nom_event += new EventHandler(nom_fonction); //création du delegate pour le rafraichissement de la textbox delegate void UpdateTextbox_delegate (); nom_fonction { UpdateTextbox_delegate UpdateTextbox_func = UpdateTextbox; Invoke(UpdateTextbox_func); } UpdateCombox {
    //lorsque tu arriveras dans cette fonction tu pourras toucher tous les élèments de ton interface sans souci de probleme d'inter thread.
    }
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    okok merci beaucoup pour vos réponses la j'ai pas le temps mais des que j'ai le temps, je teste tout cela

  6. #6
    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
    leo2v2o, ton exemple n'est pas bon (avis perso) puisque tu fais l'invoke depuis l'endroit du code où tu voudrait modifier le contrôle, alors qu'il vaut mieux centraliser toute l'opération dans une seule méthode (intérêt du InvokeRequired à ce niveau comme l'a indiqué Guulh associé à la méthode Invoke).

    Parce que si tu commences à balancer l'invoke depuis tous les endroits ou tu voudrais modifier le contrôle (on imagine hein), tu obtiens vite quelque chose d'immonde

    Une recherche sur ce forum avec InvokeRequired devrait donner des réponses je pense, car le sujet a été traité souvent et il revient encore plus souvent en ce moment

    Hors sujet sinon, mais bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_event.Invoke(null, null);
    C'est le genre de chose pas propre non plus ^^

    En général un truc comme ça c'est déjà plus propre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_event.Invoke(this, EventArgs.Empty);
    Mais l'événement n'a pas trop sa place ici, ce n'est pas vraiment le cœur du problème et ça rend ton exemple confus au final.

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut
    J'ai fait le tour du post parlant de InvokeRequired, et ainsi j'ai compris notre différence de point de vue.

    En effet, je me suis basée sur ma maigre expérience.

    Ainsi j'avais ce problème d'inter thread entre un thread et ma winform à la différence que le thread appelant ne connait pas la winform et ne doit pas avoir de référence sur elle: le thread étant implémenté dans une Dll où tout est fait à base d'interface afin que ce soit générique (modification du code de la Dll sans pour autant modifier les références faites à ces fonctions et événements dans la winform).

    Désolé pour cette information corrompue...

    Bonne journée,

    salutations.

Discussions similaires

  1. Thread et TextBox
    Par archer dans le forum C#
    Réponses: 8
    Dernier message: 20/05/2008, 00h14
  2. Réponses: 5
    Dernier message: 19/05/2008, 10h31
  3. Controler des textBox dans des thread
    Par ramaro dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/04/2008, 14h21
  4. Textbox et Thread
    Par migutz dans le forum VB.NET
    Réponses: 1
    Dernier message: 22/04/2008, 12h46
  5. [vc++ 2005] acceder a un textbox a partir d un thread
    Par jerome86600 dans le forum VC++ .NET
    Réponses: 9
    Dernier message: 12/07/2006, 13h10

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