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 :

Problème thread dans une autre classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 256
    Par défaut Problème thread dans une autre classe
    Bonjour,

    Surement une question toute bête mais je me prends la tête depuis un petit moment donc j'aurais besoin d'un petit coup de pouce.

    Voici mon code ( c'est un exemple )

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    using System; 
    using System.Drawing; 
    using System.Collections; 
    using System.ComponentModel; 
    using System.Windows.Forms; 
    using System.Data; 
    using System.Threading; 
     
    namespace ControlInvokeSample 
    { 
        public class Form1 : System.Windows.Forms.Form 
        { 
            private System.Windows.Forms.Label label_Affichage; 
            private System.Windows.Forms.Button button_Start; 
            private System.ComponentModel.Container components = null; 
     
            public Form1() 
            { 
                InitializeComponent(); 
            } 
     
            protected override void Dispose( bool disposing ) 
            { 
                if( disposing ) 
                { 
                    if (components != null) 
                    { 
                        components.Dispose(); 
                    } 
                } 
                base.Dispose( disposing ); 
            } 
     
            #region Code généré par le Concepteur Windows Form 
            /// <summary> 
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas 
            /// le contenu de cette méthode avec l'éditeur de code. 
            /// </summary> 
            private void InitializeComponent() 
            { 
                this.label_Affichage = new System.Windows.Forms.Label(); 
                this.button_Start = new System.Windows.Forms.Button(); 
                this.SuspendLayout(); 
                // 
                // label_Affichage 
                // 
                this.label_Affichage.Location = new System.Drawing.Point(8, 40); 
                this.label_Affichage.Name = "label_Affichage"; 
                this.label_Affichage.Size = new System.Drawing.Size(472, 72); 
                this.label_Affichage.TabIndex = 0; 
                // 
                // button_Start 
                // 
                this.button_Start.Location = new System.Drawing.Point(8, 8); 
                this.button_Start.Name = "button_Start"; 
                this.button_Start.TabIndex = 1; 
                this.button_Start.Text = "Start"; 
                this.button_Start.Click += new System.EventHandler(this.button_Start_Click); 
                // 
                // Form1 
                // 
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
                this.ClientSize = new System.Drawing.Size(488, 117); 
                this.Controls.Add(this.button_Start); 
                this.Controls.Add(this.label_Affichage); 
                this.Name = "Form1"; 
                this.Text = "Form1"; 
                this.ResumeLayout(false); 
     
            } 
            #endregion 
     
            [STAThread] 
            static void Main() 
            { 
                Application.Run(new Form1()); 
            } 
     
            // **************** 
            // définition du delegate qui sera utilisé 
            private delegate void UpdateLabelDelegate ( string text ); 
            // **************** 
     
            private UpdateLabelDelegate m_upLbl; 
            private Thread m_monThread; 
     
     
            private void button_Start_Click(object sender, System.EventArgs e) 
            { 
                button_Start.Enabled = false; 
     
                // affectation du nom du thread courant 
                Thread.CurrentThread.Name = "Thread principal"; 
     
                // initialisation de l'instance de UpdateLabelDelegate qui sera utilisée dans le thread 
                m_upLbl = new UpdateLabelDelegate(this.MaMethodeDeMajDuLabel); 
     
                // création et lancement du thread "supplémentaire" 
                m_monThread = new Thread(new ThreadStart(this.ThreadProc)); 
                m_monThread.Name = "Thread supplémentaire"; 
                m_monThread.Start(); 
            } 
     
            private void ThreadProc() 
            { 
                // le tableau d'object qui sera utilisé pour le passage des paramètres. 
                object [] args = new object[1]; 
     
                for ( int i=0; i<=10; i++) 
                { 
                    // affectation du texte, c'est lui qui sera reçu en paramètre "text" de notre méthode 
                    args[0] = string.Format("{0} (depuis : {1})", i.ToString(), Thread.CurrentThread.Name); 
     
                    // **************** 
                    label_Affichage.Invoke(m_upLbl, args); 
                    // **************** 
     
                    // petite pause 
                    Thread.Sleep(500); 
                } 
     
                args[0] = string.Format("C'est fini :-) (depuis : {0})", Thread.CurrentThread.Name); 
                label_Affichage.Invoke(m_upLbl, args); 
            } 
     
            // **************** 
            // la méthode correspondant à la déclaration de UpdateLabelDelegate 
            // qui fera la MAJ du texte du Label dans le thread auquel appartient le contrôle. 
            private void MaMethodeDeMajDuLabel(string text) 
            { 
                // MAJ du texte en ajoutant le nom du thread depuis lequel cette maj est faite. 
                label_Affichage.Text = string.Format("{0}\r\nLabel mis à jour depuis : {1}", text, Thread.CurrentThread.Name);
            } 
            // **************** 
        } 
    }
    Ma demande porte sur le fait de savoir comment puis je mettre la fonction 'ThreadProc' dans une autre classe car je veux différencier l'affichage de mon traitement.

    Merci de votre aide !

  2. #2
    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
    Par défaut
    Je ne vois pas le problème. Qu'est ce qui t'empèche de le faire ?
    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

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 256
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Je ne vois pas le problème. Qu'est ce qui t'empèche de le faire ?
    Je ne sais pas gérer les délégués en relation avec ma form à partir d'une autre classe.

  4. #4
    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
    Par défaut
    Tu déclares MaMethodeDeMajDuLabel en public et tu l'appelles depuis l'autre classe.
    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

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 256
    Par défaut
    La déclaration de mon délégué, je le laisse dans ma classe 'Form1' ?
    Comment je fais dans mon autre classe pour appeler ma méthode 'label_affichage.invoke' ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Par défaut
    Ton besoin est de réutiliser ce traitement dans la mm form pour plusieurs lablel ou bien réutiliser le traitement pour plusieurs forms?

Discussions similaires

  1. [Graphics View] Problème de récupération de QList<QGraphicsItem *> dans une autre classe
    Par ChevalierN dans le forum Débuter
    Réponses: 13
    Dernier message: 07/01/2012, 18h04
  2. Réponses: 1
    Dernier message: 24/08/2009, 12h03
  3. Thread / Invoke / dans une autre classe
    Par totoz dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/03/2009, 16h07
  4. [Thread] Reveiller un thread a partir d'un autre thread d'une autre classe
    Par arnolpourri dans le forum Concurrence et multi-thread
    Réponses: 18
    Dernier message: 11/04/2007, 15h18
  5. Réponses: 12
    Dernier message: 11/11/2005, 14h25

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