que tienen una sencilla aplicación con el siguiente código:C# 2.0 Threading de interrogación (métodos anónimos)
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();
Digamos que en 'I = InitialDirectory' directorio tengo 3 archivos. Esta aplicación debe crear 3 hilos, con cada hilo imprimiendo uno de los nombres de archivo; sin embargo, en su lugar, cada hilo imprimirá el nombre del último archivo en la matriz de 'archivos'.
¿Por qué es esto? ¿Por qué la variable 'f' del archivo actual no se está configurando correctamente en el método anónimo?
Nota para futuros lectores: este comportamiento [realmente cambiará] (http://stackoverflow.com/a/8899347/137188) en C# 5.0. Cada iteración creará una nueva variable de bucle separada. Con ese cambio, el código en esta pregunta se comportaría como el asker originalmente esperado. – tcovo