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 :

comment acceder a un control depuis un thread?


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut comment acceder a un control depuis un thread?
    bonjour;

    j'ai une form est un thread qui tourne et je veux depuis ce thread modifier le text d'une textbox.

    comment dois je faire? la textbox n'est pas vu par mon thread?

    merci d'avance..
    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  2. #2
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Je te conseillerai d'utiliser un event.

    Le form pourrait observer cet event ainsi nulle besoin pour ton thread de connaitre le form.

    Pense à utiliser un call back pour la modification du textbox.

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu peux aussi créer une méthode publique dans ton formulaire qui affecte le texte du textbox, et appeler cette méthode depuis un autre thread en utilisant la méthode Invoke.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut
    le delegate ca parle a quelqu'un...il parait que ca peut m'aider?
    Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........

  5. #5
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Bon alors,
    dans ton thread, tu déclares un event et le delegate qui va avec.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public delegate void SuperEventHandler(string argu, int trop, object bien...);
    public event SuperEventHandler SuperEvent;
    Pour l'écouter dans ton form, t'as besoin d'une méthode dont la signature correspond à celle du delegate plus haut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void MaSuperMethode(string argu, int trop, object bien...)
    Puis tu "enregistres" ton form comme observateur de l'event:
    monObjectDansLeThread.SuperEvent += new ClassDE_monObjectDansLeThread.SuperEventHandler(MaSuperMethode)
    Avec ça, ça aurait pu marcher, mais l'accès aux forms n'est pas ThreadSafe. Donc il te faut un autre delegate avec la même signature, dans ton form:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public delegate void SuperEventHandler_DeMonForm(string argu, int trop, object bien...);
    et le code de ta methode doit ressembler à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void MaSuperMethode(string argu, int trop, object bien...)
    {
    if (MaTextBox.InvokeRequired)
        {
          SuperEventHandler_DeMaForm seh = new SuperEventHandler_DeMonForm(MaSuperMethode);
          MaTextBox.Invoke(seh , (new object[] { argu, trop, bien ...}));
         }
    else
         {
           //Execute ce que tu veux
         }
    }
    Avec ça oublie pas quand même de lancer l'évenement au moment opportun.
    Voilà, tu vois, c'est pas si compliqué....

Discussions similaires

  1. comment acceder à un WS HTTPS depuis SOAP
    Par hycar33 dans le forum Services Web
    Réponses: 0
    Dernier message: 29/12/2014, 14h39
  2. Réponses: 1
    Dernier message: 24/01/2013, 01h08
  3. comment acceder a une fonction depuis une classe
    Par the-morpher dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/06/2009, 18h04
  4. Inclure un control dans les Resource? Ou comment acceder a un controle de mon style
    Par pascalwick dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 03/02/2009, 13h12
  5. Réponses: 4
    Dernier message: 12/03/2008, 13h18

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