305 votes

ThreadStart avec des paramètres

Comment démarrer un thread avec des paramètres en C #?

535voto

JaredPar Points 333733

L'une des deux surcharges du constructeur Thread prend un délégué ParameterizedThreadStart qui vous permet de passer un seul paramètre à la méthode start. Malheureusement, il ne permet qu'un seul paramètre et il le fait d'une manière dangereuse parce qu'il le passe en tant qu'objet. Je trouve qu'il est beaucoup plus facile d'utiliser une expression lambda pour capturer les paramètres pertinents et les transmettre de manière fortement typée.

Essayez le suivant

 public Thread StartTheThread(SomeType param1, SomeOtherType param2) {
  var t = new Thread(() => RealStart(param1, param2));
  t.Start();
  return t;
}

private static void RealStart(SomeType param1, SomeOtherType param2) {
  ...
}
 

191voto

Erick Points 2430

Oui

 Thread t = new Thread (new ParameterizedThreadStart(myParamObject));
t.Start (myUrl);
 

165voto

Georgi-it Points 1403

Vous pouvez utiliser des expressions lambda

 private void MyMethod(string param1,int param2)
{
  //do stuff
}
Thread myNewThread = new Thread(() => MyMethod("param1",5));
myNewThread.Start();
 

C'est la meilleure réponse que j'ai pu trouver, c'est rapide et facile.

38voto

Spencer Ruport Points 24589
 Thread thread = new Thread(Work);
thread.Start(Parameter);

private void Work(object param)
{
    string Parameter = (string)param;
}
 

Le type de paramètre doit être un objet.

MODIFIER:

Bien que cette réponse ne soit pas incorrecte, je recommande de ne pas utiliser cette approche. L'utilisation d'une expression lambda est beaucoup plus facile à lire et ne nécessite pas de conversion de type. Voir ici: http://stackoverflow.com/a/1195915/52551

35voto

huseyint Points 8196
class Program
{
    static void Main(string[] args)
    {
        Thread t = new Thread(new ParameterizedThreadStart(ThreadMethod));

        t.Start("My Parameter");
    }

    static void ThreadMethod(object parameter)
    {
        // parameter equals to "My Parameter"
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X