我的代码有一个非常奇怪的问题.它将完全运行1st for循环,然后完成foreach,但随后它将跳回到"ThreadStart IMAPDelegate"(for循环的第1行),然后由于ArgumentOutOfRangeException而崩溃.有人可以解释为什么程序这样做?我逐行调试它,它实际上只是跳回到for循环中的一行.如果它再次正常运行for循环,它会将x设置为0并且它不会崩溃.有什么建议?
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();
}
Run Code Online (Sandbox Code Playgroud)
当您使用这样的匿名方法时,这是设计使然.一旦线程开始运行,它就会执行SendParams()方法调用.然后爆炸,因为"x"变量已经增加超出UserInfo.Count.固定:
for (int x = 0; x < UserInfo.Count; x++)
{
int user = x;
ThreadStart IMAPDelegate = delegate{SendParams(UserInfo[user], IMAPServers[user]); };
MyThreads.Add(new Thread(IMAPDelegate));
}
Run Code Online (Sandbox Code Playgroud)