Ich habe eine einfache Anwendung mit dem folgenden Code:C# 2.0 Threading Frage (anonyme Methoden)
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();
Können sagen, in 'I = Initial' Verzeichnis Ich habe 3 Dateien. Diese Anwendung sollte dann 3 Threads erstellen, wobei jeder Thread einen der Dateinamen ausdruckt. Stattdessen wird jeder Thread den Namen der letzten Datei im Array 'files' ausgeben.
Warum ist das? Warum wird die aktuelle Datei 'f' Variable nicht richtig in der anonymen Methode eingerichtet?
Hinweis für zukünftige Leser: Dieses Verhalten [wird sich tatsächlich ändern] (http://stackoverflow.com/a/8899347/137188) in C# 5.0. Jede Iteration erstellt eine neue separate Schleifenvariable. Mit dieser Änderung würde sich der Code in dieser Frage so verhalten, wie der ursprünglich erwartete Asker. – tcovo