我对c#和多线程有点新,所以我可能在这里犯了一个愚蠢的错误,但我似乎无法弄清楚这一点。我有一个应用程序根据在我的网络上发现的机器数量创建一个线程数组,然后为每台机器创建一个执行我创建的函数的线程。退出for循环后,我创建了另一个运行另一个函数的线程。我的函数工作得很好,没有问题,在退出for循环并继续创建下一个线程之后,问题出于某种原因,我的应用程序跳回到for循环,并且索引现在超出范围并导致抛出异常。我希望我明确地解释这一点,我很困惑,为什么发生这种情况,因为我不知道为什么当完成for循环时,它会执行一行代码并跳回去。反正这里是我的代码,任何帮助将不胜感激。c#多线程应用程序
smThread = new Thread[networkedComputers.Count];
for (UInt16 i = 0; i < networkedComputers.Count; i++)
{
smThread[i] = new Thread(delegate() { sm.RunServerMonitorPerMachine(networkedComputers[i].ToString()); });
smThread[i].Start();
}
dailyThread = new Thread(dailyEvents);
dailyThread.Start();
我可能会检查出任务。我认为他们更直接一点。 http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx – MattW
这不是一个答案,但总的来说,我认为在这里使用TPL会更好。通过管理低级细节本身,C#使得您比C++或C更容易。 http://msdn.microsoft.com/en-us/library/dd537609.aspx – Johnny
你在另一个线程中触摸'networkedComputers'数组吗?当您在'for'循环中时'networkedComputer.Count'可能会改变。 –