0

I have this function

static void appUpdater(string appName, string proccessName)
{
    /**/
}

I need to create a thread for each of the applications update, but ThreadStart and ParameterizedThreadStart do not match delegate

Thread wms = new Thread(new ParameterizedThreadStart(appUpdater));
wms.Start("WMS","StuMenu");
Uwe Keim
  • 38,279
  • 56
  • 171
  • 280
H DA
  • 53
  • 8

2 Answers2

1

You can make it super easy by just doing this:

Thread wms = new Thread(() => appUpdater("WMS", "StuMenu"));
wms.Start();

Alternatively, use a Task - tasks are more modern and you'll find built in language support for doing clever things with them. Don't learn threads, learn tasks.

Task t = Task.Run(() => appUpdater("WMS", "StuMenu"));
Enigmativity
  • 105,241
  • 11
  • 83
  • 163
0

You can't. Thread.Start() only accepts one parameter of type object. But you could for instance pass a custom object or a dictionary instead

Object:

class ThreadParameters {
    public string p1 {get;set;}
    public string p2 {get;set;}
}

static void appUpdater(object p) {
    ThreadParameters tp = p as ThreadParameters;
}

Thread wms = new Thread(new ParameterizedThreadStart(appUpdater));
wms.Start(new ThreadParameters{p1="p1", p2= "p2"});

Dictionary:

static void appUpdater(object p) {
    Dictionary<string, object> tp = p as Dictionary<string, object>;
}

Thread wms = new Thread(new ParameterizedThreadStart(appUpdater));
wms.Start(new Dictionary<string, object>{{"p1", "p1"}, {"p2", "p2}});

But depending on what your needs are, a Task may be the better way.

derpirscher
  • 10,570
  • 3
  • 12
  • 30