如何同时执行具有相同功能但不同参数的多个线程

时间:2015-05-04 08:34:12

标签: c# multithreading

 for (long key = 0; key < 5; key++)
{
var processingThread = new Thread(() => Setup(key));
processingThread.Start();
}

我想用每个键值执行Setup(key)函数,但同时在多个窗口上执行..

4 个答案:

答案 0 :(得分:0)

您需要在key循环内捕获for的本地副本,否则在线程实际调用Setupkey的值变为{{1} }}。如果您捕获本地副本,则该值不会更改,并且所有值都按预期工作。

5

答案 1 :(得分:-1)

查看Parallel.ForEach()Parallel.For()方法。

https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx

显式创建新线程的开销很大,应该避免。只有在有充分理由且已经考虑使用基于线程池的解决方案(例如PTL或类似方法)时才这样做。

答案 2 :(得分:-1)

for (long key = 0; key < 5; key++)
{
    var processingThread = new Thread(Setup);
    processingThread.Start(key);
}

Setup参数类型必须更改为object(并根据需要投放)

答案 3 :(得分:-2)

如果Parallel.For()没有提供技巧,您可以将它们全部传递给AutoResetEvent。
在所有代理中调用Wait(),然后在创建所有线程后调用Set()
请注意系统确实

// THIS ISN'T TESTED AND IS WRITTEN HERE, SO MIND THE SYNTAX, THIS MIGHT NOT COMPILE !!

 AutoResetEvent handle = new AutoResetEvent(true);

 for (long key = 0; key < 5; key++)
 {
    var processingThread = new Thread(() => 
        {
           handle.Wait(); 
           Setup(key)
        } );
    processingThread.Start();
 }

 handle.Set();