Ich habe ein sehr seltsames Problem mit meinem Code. Es wird vollständig die erste for-Schleife ausführen, dann die foreach, aber dann springt es zurück zum "ThreadStart IMAPDelegate" (Zeile 1 der for-Schleife) und stürzt dann wegen einer ArgumentOutOfRangeException ab. Kann jemand erklären, warum das Programm dies tut? Ich habe es Zeile für Zeile ausgepackt und es springt buchstäblich einfach wieder in die a-Zeile der for-Schleife. Wenn es die for-Schleife normalerweise wieder ausgeführt hätte, hätte es x wieder auf 0 gesetzt und es wäre nicht abgestürzt. Irgendwelche Vorschläge?Erstellen eines Array von Threads in C#
for (int x = 0; x < UserInfo.Count; x++)
{
ThreadStart IMAPDelegate = delegate{SendParams(UserInfo[x], IMAPServers[x]); };
MyThreads.Add(new Thread(IMAPDelegate));
}
foreach (Thread thread in MyThreads)
{
thread.Start();
}
+1 Sonst bekannt als "Closing über den Loop-Variable": (http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the- loop-variable-admined-behbreal.aspx –
Wenn UserInfo und MyTheads beide mehr als ein Element haben, gibt es den Fehler Count = Funktionsauswertung deaktiviert, da eine vorherige Funktionsauswertung abgelaufen ist. Sie müssen die Ausführung fortsetzen, um sie wieder aktivieren zu können –
Das ist kein Fehler, nur der Debugger beschwert sich, dass er zeitweise seine Murmeln verloren hat.Das passiert. Es gibt einen Hotfix für Debugger-Probleme mit Threads, wenn Sie VS2008 verwenden. Oder drücken Sie F5. http://support.microsoft.com/ kb/957912 –