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 :

envoyer des parametres dans le Thread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 63
    Par défaut envoyer des parametres dans le Thread
    Bonjour,

    Comment peut on envoyer des parametres dans le thread ?
    Est ce que quelqu'un peut m'aider ?

    Merci.

  2. #2
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Bonjour,

    le ThreadStart ne prend pas de paramètres, tu dois utiliser des variables globales.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 63
    Par défaut
    ParametrizedThreadStart ne marche pas ?

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    effectivement ce délégué peut prendre des paramètres de type object, donc les paramètres de ta méthode doivent êtres en object.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 63
    Par défaut
    Je dois passer deux variables par le Thread.
    Comment peut on ecrire le syntaxe ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Un thread lorsqu'il démarre peut au même titre qu'une tâche ponctuelle de pool, recevoir UN seul et unique Objet de type Object en guise de paramètre...

    on l'appel state ou état, pour symboliser l'état de démarrage du thread.

    Rien ne dit de quel type doit être cet objet, et tu peux très bien décider d'utiliser les types anonymes et générer l'objet à la volée.
    Ce n'était pas envisageable avant dotnet 4.0 mais depuis dotnet 4.0 et le mot clé dynamic tu peux l'envisager.

    si tu veux passer 2 éléments à ton thread tu peux très bien procéder comme ceci

    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
     
    public start() {
      // ici tu défini Prm1 et Prm2
     
      var thread = new Thread(process);
      thread.Start(new { prm1 = Prm1, prm2 = Prm2 });
    }
     
    private void process(object state) {
      dynamic prms = state;
     
      int prm1 = prms.prm1;
      string prm2 = prms.prm2;
     
      // mon traitement
    }
    c'est un exemple et il faudrait probablement rajouter quelques CAST mais ce n'est pas le problème... c'était plus un proof of concept qu'autre chose.
    de plus personnellement, je déconseilles cette technique, mais bon... chacun vois midi à sa porte.

  7. #7
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    En .Net tout hérite de Object, donc tu peux passer absolument n'importe quoi comme paramètre, mais juste un seul.
    Si tu veux en passer plus, il te faut les regrouper, au sein d'un tableau, d'un tuple, d'une collection, d'une hashtable, d'un autre objet ou d'une autre structure, peut importe, c'est au choix selon les paramètres à passer.
    L'important est de pouvoir le re-caster dans le bon type.

    Code csharp : 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 static void main(string[] args)
    {
        System.Threading.Thread th = new System.Threading.Thread(MonThread);
        int Param1 = 12;
        string Param2 = "salut";
        object[] ThreadParameter = new object[] { Param1, Param2 };
        th.Start(ThreadParameter);
    }
     
    public void MonThread(Object param)
    {
        object[] p = (object[])param;
        int p0 = (int)p[0];
        string p1 = (string)p[1];
        // ...
    }

  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
    Citation Envoyé par chamamo Voir le message
    , tu dois utiliser des variables globales.
    Drôle d'idée ! si il démarre n theads avec des valeurs différentes de paramètres (cas courant), il fait comment ?

  9. #9
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Drôle d'idée ! si il démarre n theads avec des valeurs différentes de paramètres (cas courant), il fait comment ?
    tu instanciés n fois une classe qui contient qu'une seul méthode avec des variables globales, j'ai dit ça parce que j'ignorais l'existence du délégué ParametrizedThreadStart.

  10. #10
    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
    Citation Envoyé par chamamo Voir le message
    tu instanciés n fois une classe qui contient qu'une seul méthode avec des variables globales, j'ai dit ça parce que j'ignorais l'existence du délégué ParametrizedThreadStart.
    Oui, logique.
    De plus ta réponse est tout à fait valide avec le Compact Framework qui n'a pas le ParameterizedThreadStart; dans ce cas, il n'y a pas trop le choix.

Discussions similaires

  1. Cacher des parametres dans l'URL method="get"
    Par ProgElecT dans le forum Langage
    Réponses: 8
    Dernier message: 09/12/2006, 22h40
  2. [C#] Utilisation des données dans un Thread
    Par Seth77 dans le forum C#
    Réponses: 12
    Dernier message: 24/10/2006, 14h14
  3. oublier volontairement des parametres dans une fonction
    Par Joe Le Mort dans le forum Langage
    Réponses: 2
    Dernier message: 23/08/2006, 16h12
  4. faire passer des parametres dans l'url
    Par Freyja dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 21/08/2006, 15h57
  5. ch a envoyer des donnees dans un tableau d'un fichier
    Par aerosketchique dans le forum C++
    Réponses: 1
    Dernier message: 08/04/2006, 18h43

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