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.

  • Anonymous

    yeah hello there..

    i have a problem dude..

    i’m having a thread which uploads a file and i calculating uploading status with in the thread which i’d like store in the global variables like session..

    my page refreshes at 2 seconds and reports back the uploading status..

    but i’m not able to catch that value in session…

    i ve tried u r way but again it returns if u have any bright ideas..

    then plx helpp…

  • Anonymous

    Its strange, it is not getting……… please help me too on same.

  • Notnecessary

    better do nothing than doing it.

  • irrildbiceRip

    юля вконтакте http vkontakte news vk hd odnokl накрутка подписчиков вконтакте

    vk r ru
    vk dj скачать бесплатно
    vk golosa бесплатно
    yamaha vk
    http vkontakte ru foto

  • 7897809

    Вдруг князь Ипполит поднялся и, знаками рук останавливая всех и просяприсесть, заговорил:- Ah! aujourd’hui on m’a racontй une anecdote moscovite, charmante: il

  • poolleyAgek

    Всем привет!!

  • Evan

    Or upgrade your core to 2.0+ and call parameterizedthreadstart. Who targets .NET 1.1 these days anyway. I sincerely hope this is a really old post.