Coder Perfect

ThreadStart with parameters


How do you start a thread with parameters in C#?

Asked by JL.

Solution #1

One of the 2 overloads of the Thread constructor takse a ParameterizedThreadStart delegate which allows you to pass a single parameter to the start method. Unfortunately though it only allows for a single parameter and it does so in an unsafe way because it passes it as object. I find it’s much easier to use a lambda expression to capture the relevant parameters and pass them in a strongly typed fashion.

Try the following

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

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

Answered by JaredPar

Solution #2

Yep :

Thread t = new Thread (new ParameterizedThreadStart(myMethod));
t.Start (myParameterObject);

Answered by Erick

Solution #3

Lambda expressions can be used.

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

This is the finest answer I’ve seen so far; it’s quick and simple.

Answered by Georgi-it

Solution #4

Thread thread = new Thread(Work);

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

An object must be the parameter type.


While this answer isn’t inaccurate, I would advise against it. It’s considerably easier to interpret a lambda expression because it doesn’t require type casting. See for more information.

Answered by Spencer Ruport

Solution #5

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"

Answered by huseyint

Post is based on