我有以下代码的简单应用:C#2.0线程问(匿名方法)
FileInfo[] files = (new DirectoryInfo(initialDirectory)).GetFiles();
List<Thread> threads = new List<Thread>(files.Length);
foreach (FileInfo f in files)
{
Thread t = new Thread(delegate()
{
Console.WriteLine(f.FullName);
});
threads.Add(t);
}
foreach (Thread t in threads)
t.Start();
允许在 'I = initialDirectory' 目录我有3个文件说。然后,此应用程序应创建3个线程,每个线程打印一个文件名;但是,每个线程将打印出'文件'数组中最后一个文件的名称。
这是为什么?为什么当前文件'f'变量没有正确设置匿名方法?
请注意未来的读者:在C#5.0中这种行为[实际上会改变](http://stackoverflow.com/a/8899347/137188)。每次迭代都会创建一个新的单独的循环变量。随着这一变化,这个问题中的代码将按照原先的预期行事。 – tcovo 2012-01-24 17:43:45