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 :

Thread - Heritage - C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Par défaut Thread - Heritage - C#
    Bonjour à tous,

    comme le titre l'annonce j'ai un petit soucis avec mon code C#. Le but de mon code est de récupérer des variables par leurs adresses physiques. Ces variables sont contenues dans un automate, je dois donc consulter le service web via le XML et le protocole SOAP afin que celui ci me renvois les valeurs des variables. Malheuresement j'ai un problème, je n'arrive pas a dériver ma classe " Thread ". J'utilise Visual Studio 2005, voici le début de mon code :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using webmodbus.WebReference;
    using System.Windows.Forms;
    using System.Threading;
     
    namespace webmodbus
    {
        public class ThreadLecture : Thread {
     
            ModbusXmlDa service;
            ModbusXmlDa port;
            int[] result;
            Label adrLabel;
            string msg = "Il y a une erreur";
    J'ai essayer de procéder comme ceci en m'inspirant de quelques docs sur internet...

    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using webmodbus.WebReference;
    using System.Windows.Forms;
    using System.Threading;
     
    namespace webmodbus
    {
        public class ThreadLecture : Thread {
     
            ModbusXmlDa service;
            ModbusXmlDa port;
            int[] result;
            Label adrLabel;
            string msg = "Il y a une erreur";
    ...ou encore :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using webmodbus.WebReference;
    using System.Windows.Forms;
    using System.Threading;
     
    namespace webmodbus
    {
        public class ThreadLecture : public System.Threading.Thread {
     
            ModbusXmlDa service;
            ModbusXmlDa port;
            int[] result;
            Label adrLabel;
            string msg = "Il y a une erreur";
    ...mais rien n'y fait ca ne marche pas. Etant donné l'erreur de compilation survenue je n'ai pas pus débuger afin de voir si mon application fonctionné.

    En espérant que vous pourriez m'aider

  2. #2
    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
    La classe Thread est sealed : elle ne peut pas être dérivée. Tu dois pouvoir très bien t'en tirer en faisant une classe dont l'un des membres est un thread (je vois pas trop d'ailleurs pourquoi tu voudrais hériter de cette classe )

  3. #3
    Membre confirmé Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Par défaut
    Citation Envoyé par Guulh Voir le message
    La classe Thread est sealed : elle ne peut pas être dérivée. Tu dois pouvoir très bien t'en tirer en faisant une classe dont l'un des membres est un thread (je vois pas trop d'ailleurs pourquoi tu voudrais hériter de cette classe )
    Merci pour ces réponses si rapides les gars !
    Voici ma class principale, celle dont je vous ai présenté auparavant est une classe qui s'ajoute à celle-ci. J'avoue avoir un peu de mal avec les thread...
    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
     
    public partial class Form1 : Form
        {
            ThreadLecture objThreadLecture;
            System.Threading.Thread Lecteur;
            public Form1()
            {            
                InitializeComponent();
                ThreadLecture objThreadLecture = new ThreadLecture(Value.Text);
                System.Threading.Thread Lecteur = new System.Threading.Thread(objThreadLecture.run);
            }  
    /*************************** Lancer la lecture ***************************/
     
            private void Lancer_Click(object sender, EventArgs e)
            {
                Lecteur.Start();
                Lancer.setEnabled(false);
            }
    Le thread étant sealed, je vais donc procéder autrement en créant un thread qui a comme fonction principale une methode de ma classe non ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    bah, dans ton constructeur tu n'assignes pas tes variables, tu en créés de nouvelles. Donc la, dans l'hypothese ou ca compile, ce qui m'etonnerai fortement, tu vas te bouffer une NullReference.

    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
    public partial class Form1 : Form
        {
            ThreadLecture objThreadLecture;
            System.Threading.Thread Lecteur;
            public Form1()
            {            
                InitializeComponent();
                objThreadLecture = new ThreadLecture(Value.Text);
                Lecteur = new System.Threading.Thread(objThreadLecture.run);
            }  
    /*************************** Lancer la lecture ***************************/
     
            private void Lancer_Click(object sender, EventArgs e)
            {
                Lecteur.Start();
                Lancer.setEnabled(false);
            }
    la ca ira deja mieux. =)

  5. #5
    Membre confirmé Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Par défaut
    Ok merci !

    Une dernière petite chose, étant donné que le thread est sealed comment dois-je procéder avec mon code ? j'ai beau avoir chercher 6h aujourd'hui, j'avoue un peu m'y perdre au niveau des thread

    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using webmodbus.WebReference;
    using System.Windows.Forms;
    using System.Threading;
     
    namespace webmodbus
    {
        public class ThreadLecture {
     
            ModbusXmlDa service;
            ModbusXmlDa port;
            int[] result;
            Label adrLabel;
            string msg = "Il y a une erreur";
     
        public ThreadLecture(string Text)
        {
            adrLabel.Text = Text;
            try{
                service = new ModbusXmlDa();
                port = GetModbusXmlDaSoap();
            }
            catch (System.Web.Services.Protocols.SoapHeaderException exSoapH)
            { MessageBox.Show(exSoapH.Message, msg); }
            catch (System.Web.Services.Protocols.SoapException exSoap)
            { MessageBox.Show(exSoap.Message, msg); }
            catch (System.Net.WebException exWeb)
            { MessageBox.Show(exWeb.Message, msg); }
            catch (System.InvalidCastException exC)
            { MessageBox.Show(exC.Message, msg); }
            catch (SystemException ex) { MessageBox.Show(ex.Message, msg); }
        }
        public void run(){
            try{
     
                while(!Interrupted()){
                    result = port.ReadMultipleRegisters(0, 126, 1);
                    //adrLabel.Text(result.getInt.get(0).toString());
                    //sleep(200);
                }   
            }
            catch (System.Web.Services.Protocols.SoapHeaderException exSoapH)
            { MessageBox.Show(exSoapH.Message, msg); }
            catch (System.Web.Services.Protocols.SoapException exSoap)
            { MessageBox.Show(exSoap.Message, msg); }
            catch (System.Net.WebException exWeb)
            { MessageBox.Show(exWeb.Message, msg); }
            catch (System.InvalidCastException exC)
            { MessageBox.Show(exC.Message, msg); }
            catch (SystemException ex) { MessageBox.Show(ex.Message, msg); }
        }
    }
    }

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Bah, Bluedeep t'as donné le code pour créer un Thread plus haut. Tu instancies ton thread avec sa methode d'entrée et tu le fais partir.

    Qu'est ce que tu ne comprends pas ?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Thread est sealed, et donc ne peut pas être dérivé.

    J'avoue ne pas comprendre pourquoi tu veux la dériver.

    Une thread s'utilise de la manière suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
           Thread t = new Thread( myThreadedMethod );
           t.Start();
     
            void myThreadedMethod()
            {
                // code s'exécutant dans le thread
            }

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Grillé par Guuhl

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. heritage de la classe System.Threading.Thread
    Par Minoucha2006 dans le forum C#
    Réponses: 5
    Dernier message: 08/05/2008, 12h59
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. Pb de Threads et d'heritage de Thread
    Par pi05 dans le forum MFC
    Réponses: 3
    Dernier message: 22/03/2005, 10h15
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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