如何创建具有多个参数的线程?

时间:2018-07-04 09:41:09

标签: c# multithreading

我有此功能

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

我需要为每个应用程序更新创建一个线程,但是ThreadStart和ParameterizedThreadStart不匹配委托

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

2 个答案:

答案 0 :(得分:1)

您可以通过执行以下操作使其变得超级简单:

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

或者,使用Task-任务更加现代,您会发现内置的语言支持可帮助您执行巧妙的操作。不学习线程,不学习任务。

Task t = Task.Run(() => appUpdater("WMS", "StuMenu"));

答案 1 :(得分:0)

不能。 Thread.Start()仅接受类型为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"});

词典:

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}});

但是根据您的需求,最好使用Task