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 :

[C#] question de débutant sur les threads?


Sujet :

C#

  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 [C#] question de débutant sur les threads?
    bonjour a tous...

    Voila je débute avec les thread... voila un petit bout de code (bidouille mais c'est pour comprendre )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            private void button1_Click(object sender, EventArgs e)
            {
                ThreadStart operation = new ThreadStart(Fonction1);
     
                Thread LeThread = new Thread(operation);
     
                LeThread.Start();
            }
     
            private void Fonction1()
            {
                textBox1.Text = "dans le thread";
            }
    mais le problème est qu'a l'exécution car textBox 1 ne peut pas etre atteind par mon thread.... (texBox1 fait parti de mon appli principale)
    Comment dois je faire?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    Il faut que tu utilises la fonction Invoke des composants graphiques :

    Code C# : 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
     
    private void button1_Click(object sender, EventArgs e)
    {
           ThreadStart operation = new ThreadStart(Fonction1);
     
          Thread LeThread = new Thread(operation);
     
          LeThread.Start();
    }
     
    private void Fonction1()
    {
             if( textBox1.InvokeRequired)
                 textBox1.Invoke(new TextBoxInvokeHandler(FonctionTextBox));
             else
                 FonctionTextBox()
    }
     
    private delegate void TextBoxInvokeHandler();
     
    private void FonctionTextBox()
    {
       textBox1.Text = "dans le thread";
    }

  3. #3
    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
    merci pour ta reponse mais comment dois je comprendre cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       textBox1.Invoke(new TextBoxInvokeHandler(FonctionTextBox));
    merci

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Jayceblaster
    merci pour ta reponse mais comment dois je comprendre cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       textBox1.Invoke(new TextBoxInvokeHandler(FonctionTextBox));
    merci
    Hum ... je te conseil d'aller lire l'aide du framework pour une description complete.

    en gros tu crée un nouveau delegue que tu appelles si besoin est.

  5. #5
    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
    je suis deja allé voir mais en fait je voudrais savoir ou est defini TextBoxInvokeHandler car ca plante a la compile

  6. #6
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par dev01
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private delegate void TextBoxInvokeHandler();
     
    private void FonctionTextBox()
    {
       textBox1.Text = "dans le thread";
    }
    Dans mon code j'ai défini mon propre delegué pour cette action ce qui te permet passer ce que tu veux en argument de ta fonction

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Pour une petite explication, effectivement seul le thread propriétaire de contrôle doit accéder à ces contrôles (sinon l'appli peut avoir de graves problems ). Pour simplifier le boulot, les contrôles offrent une propriété InvokeRequired qui renvoie vrai si le thread courant n'est pas le propriétaire du contrôle. Dans ce cas on peut appeler la méthode Invoke(UnDélégué) qui garanti l'appel du délégué dans le thread propriétaire des contrôles.

    Voila.

Discussions similaires

  1. Petite question de débutant sur les lumières
    Par Clad3 dans le forum OpenGL
    Réponses: 12
    Dernier message: 05/11/2007, 22h22
  2. question de débutant sur les threads
    Par Virgile le chat dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 27/06/2007, 17h10
  3. Réponses: 15
    Dernier message: 15/10/2006, 16h52
  4. question de débutant sur les jointures
    Par dreamcocktail dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/03/2006, 15h24
  5. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51

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