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
  • 39,551
  • 56
  • 175
  • 291
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
  • 113,464
  • 11
  • 89
  • 172
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
  • 14,418
  • 3
  • 18
  • 35