thread with multiple parameters

88,592

Solution 1

Try using a lambda expression to capture the arguments.

Thread standardTCPServerThread = 
  new Thread(
    unused => startSocketServerAsThread(initializeMemberBalance, arg, 60000)
  );

Solution 2

Here is a bit of code that uses the object array approach mentioned here a couple times.

    ...
    string p1 = "Yada yada.";
    long p2 = 4715821396025;
    int p3 = 4096;
    object args = new object[3] { p1, p2, p3 };
    Thread b1 = new Thread(new ParameterizedThreadStart(worker));
    b1.Start(args);
    ...
    private void worker(object args)
    {
      Array argArray = new object[3];
      argArray = (Array)args;
      string p1 = (string)argArray.GetValue(0);
      long p2 = (long)argArray.GetValue(1);
      int p3 = (int)argArray.GetValue(2);
      ...
    }>

Solution 3

You need to wrap them into a single object.

Making a custom class to pass in your parameters is one option. You can also use an array or list of objects, and set all of your parameters in that.

Solution 4

Use the 'Task' pattern:

public class MyTask
{
   string _a;
   int _b;
   int _c;
   float _d;

   public event EventHandler Finished;

   public MyTask( string a, int b, int c, float d )
   {
      _a = a;
      _b = b;
      _c = c;
      _d = d;
   }

   public void DoWork()
   {
       Thread t = new Thread(new ThreadStart(DoWorkCore));
       t.Start();
   }

   private void DoWorkCore()
   {
      // do some stuff
      OnFinished();
   }

   protected virtual void OnFinished()
   {
      // raise finished in a threadsafe way 
   }
}

Solution 5

.NET 2 conversion of JaredPar answer

Thread standardTCPServerThread = new Thread(delegate (object unused) {
        startSocketServerAsThread(initializeMemberBalance, arg, 60000);
    });
Share:
88,592
Lucas B
Author by

Lucas B

Health first. Software second. Coffee and cupcakes. My CV

Updated on July 09, 2022

Comments

  • Lucas B
    Lucas B almost 2 years

    Does anyone know how to pass multiple parameters into a Thread.Start routine?

    I thought of extending the class, but the C# Thread class is sealed.

    Here is what I think the code would look like:

    ...
        Thread standardTCPServerThread = new Thread(startSocketServerAsThread);
    
        standardServerThread.Start( orchestrator, initializeMemberBalance, arg, 60000);
    ...
    }
    
    static void startSocketServerAsThread(ServiceOrchestrator orchestrator, List<int> memberBalances, string arg, int port)
    {
      startSocketServer(orchestrator, memberBalances, arg, port);
    }
    

    BTW, I start a number of threads with different orchestrators, balances and ports. Please consider thread safety also.