for (long key = 0; key < 5; key++)
{
var processingThread = new Thread(() => Setup(key));
processingThread.Start();
}
我想用每个键值执行Setup(key)
函数,但同时在多个窗口上执行..
答案 0 :(得分:0)
您需要在key
循环内捕获for
的本地副本,否则在线程实际调用Setup
时key
的值变为{{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();