[C#] Passer des paramètres à un Thread ? [Résolu]

Passer des paramètres à un Thread ? [Résolu] [C#] - C#/.NET managed - Programmation

Marsh Posté le 21-06-2004 à 14:33:46    

Bonjour,
 
Je voudrais savoir si il existe une façon de faire "officielle" prévue par  Microsoft pour passer des paramètres à un thread :ange:. Bien évidemment, ces paramètres sont connus avant le lancement du thread.
 
J'ai déjà pu lire différentes solutions, mais aucune n'est basée sur une classe et/ou méthode prévue à cet effet par Microsoft :heink:.
Il n'y aurait donc pas de solution plus "propre" que la Hashtable faisant correspondre les thread avec les paramètres qui leur sont destinés :??:?
 
N'hésitez pas à demander plus de précision si je n'ai pas été assez clair.
 
Merci d'avance :hello:


Message édité par HannibAlBundie le 24-06-2004 à 09:46:21
Reply

Marsh Posté le 21-06-2004 à 14:33:46   

Reply

Marsh Posté le 21-06-2004 à 14:44:57    

ou utiliser un delegate

Reply

Marsh Posté le 21-06-2004 à 14:54:01    

Code :
  1. using System.Threading;
  2. public class ThreadArgs
  3. {
  4.   int i;
  5.   public ThreadArgs(int ii)
  6.   {
  7.     this.i = ii;
  8.   }
  9.   public void Run()
  10.   {
  11.     while(this.i >= 0)
  12.     {
  13.       System.Console.WriteLine(this.i);
  14.       this.i--;
  15.     }
  16.   }
  17.   public static void Main()
  18.   {
  19.     ThreadArgs ta = new ThreadArgs(10);
  20.     Thread t = new Thread( new ThreadStart(ta.Run) );
  21.     t.Start();
  22.     t.Join();
  23.   }
  24. }

Reply

Marsh Posté le 21-06-2004 à 15:49:04    

Merci beaucoup, je trouve ça effectivement plus clean, moins bricolage du dimanche avec Leroy Merlin.
 
Par contre, désolé d'être pointilleux (et ignorant :sweat:), mais pourrais tu m'expliquer ce que tu appelles 'delegate' ?
Parce que je connais la classe Delegate, mais tu n'y fais pas référence :heink:. Donc j'apprécierais bien une petite explication :whistle:.
 
Merci d'avance :jap:

Reply

Marsh Posté le 21-06-2004 à 15:58:43    

ben c'est dans ton cours de C# ... :D

Reply

Marsh Posté le 21-06-2004 à 17:20:28    

Bon, après une brève recherche sur le net, les explications que j'ai pu trouver étaient toutes de cet ordre :

Citation :

En C# on retrouve la possibilité de définir des signatures de fonctions. C'est à dire, on peut préciser par exemple qu'une méthode prends en paramète une méthode de type void et prenant deux paramètres entiers. On passe en fait l'addresse de cette fonction.


Ca correspond bien à l'idée que j'en avais au travers de la courte définition de msdn :

Citation :

la classe Delegate représente un délégué qui est une structure de données référençant une méthode static ou une instance de classe et une méthode d'instance de cette classe.


Malheureusement, vu que tu n'utilises aucun delegate à proprement parlé (pas d'utilisation du mot clé 'delegate') je n'ai pas réussi à comprendre pourquoi tu définis ta solution comme "utiliser un delegate" :sweat:. On retrouve effectivement le concept du delegate lors de l'appel à ThreadStart, mais cela reste commun à tout usage aux threads :heink:.
 
Je suis bien conscient qu'une longue explication serait laborieuse à écrire :pfff:, donc vu que je n'ai pas de cours de C#, si tu avais ne serait-ce qu'un ptit lien ça me renderait service :p.
 
En tout cas, merci de ton intérêt :jap:


Message édité par HannibAlBundie le 21-06-2004 à 17:21:55
Reply

Marsh Posté le 21-06-2004 à 20:01:06    

t'as rien à déclarer.  
 
dans le cas qui nous intéresse, le constructeur de Thread attend un delegate void ThreadStart(); (une fonction qui retourne void)
 
et bien tu lui donne ! tu as un objet avec une méthode qui satisfait ce prototype et vlan new ThreadStart( instance.méthode) tu instancie un Delegate d, tel que d() <-> instance.méthode()

Reply

Marsh Posté le 23-06-2004 à 09:35:59    

okiii, ha yé ... tout s'éclaire :p
 
Merci beaucoup ! :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed