Pass Variables to a New Thread in C#

Posted December 9, 2006 by johnnythawte in C programming

When you create a new thread in .net 1.1, you cannot pass any parameters to the ThreadStart delegate, which makes passing startup variables difficult. This recipe shows you an easy workaround.

Since the ThreadStart delegate doesn’t accept parameters, you need to set the parameters somewhere before you create the new thread. What we’ll do is create a small class to store the variables, and then create a function in the class to pass into ThreadStart.

class myObject
public string myvariable;

public void RunThread()
// use myvariable here

You should really use properties instead of a public variable, but this makes the code sample simpler. The method that you pass into ThreadStart must be void, and accept no parameters.

Here’s the sample code for creating the object, passing in a variable, and then using the object to create the new thread:

myObject m = new myObject();
m.myvariable = "test data that the thread will need";

// Create the new thread, using the function
// from the object we created

Thread t = new Thread(new ThreadStart(m.RunThread));
t.IsBackground = true;
t.Name = "UpdateBookmarkThread";

Now when the thread is started, it will have access to the variables stored in it’s own object instance. This technique is very useful if you need to open multiple threads, passing in different information to each.

The Conversation

Follow the reactions below and share your own thoughts.