我有以下代碼的簡單應用: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