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 wh
.NET 2 conversion of JaredPar answer
Thread standardTCPServerThread = new Thread(delegate (object unused) {
startSocketServerAsThread(initializeMemberBalance, arg, 60000);
});
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);
...
}>
You can't. Create an object that contain params you need, and pass is it. In the thread function cast the object back to its type.
You can take Object array and pass it in the thread. Pass
System.Threading.ParameterizedThreadStart(yourFunctionAddressWhichContailMultipleParameters)
Into thread constructor.
yourFunctionAddressWhichContailMultipleParameters(object[])
You already set all the value in objArray.
you need to abcThread.Start(objectArray)
void RunFromHere()
{
string param1 = "hello";
int param2 = 42;
Thread thread = new Thread(delegate()
{
MyParametrizedMethod(param1,param2);
});
thread.Start();
}
void MyParametrizedMethod(string p,int i)
{
// some code.
}
I've been reading yours forum to find out how to do it and I did it in that way - might be useful for somebody. I pass arguments in constructor which creates for me working thread in which will be executed my method - execute() method.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
using System.IO;
using System.Threading;
namespace Haart_Trainer_App
{
class ProcessRunner
{
private string process = "";
private string args = "";
private ListBox output = null;
private Thread t = null;
public ProcessRunner(string process, string args, ref ListBox output)
{
this.process = process;
this.args = args;
this.output = output;
t = new Thread(new ThreadStart(this.execute));
t.Start();
}
private void execute()
{
Process proc = new Process();
proc.StartInfo.FileName = process;
proc.StartInfo.Arguments = args;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string outmsg;
try
{
StreamReader read = proc.StandardOutput;
while ((outmsg = read.ReadLine()) != null)
{
lock (output)
{
output.Items.Add(outmsg);
}
}
}
catch (Exception e)
{
lock (output)
{
output.Items.Add(e.Message);
}
}
proc.WaitForExit();
var exitCode = proc.ExitCode;
proc.Close();
}
}
}