试图让程序在 url 列表上运行并打开有限数量的线程来处理它们。问题是当 listPosition 为 18 时,while 循环将执行,即使 siteUrls.Count 为 18。但它永远不会显示我添加的任何测试消息框。线程代码本身有一个执行 currentThreads 的储物柜——在线程工作结束时。
为什么当条件变为(18<18)时它会启动while循环?为什么它尝试使用 18 启动线程但它不会显示消息框?仅当我放置的线程数超过列表项数时才会出现问题。这对我来说很奇怪,因为我认为当 listPosition 等于 _siteUrls.Count 时它不应该运行循环。我尝试添加各种“等待”线程启动,但它仍然不起作用。
ps 当我在增加 listPosition 之前添加 5ms 等待它变得更加稳定。它究竟需要等待什么,以便我可以更好地对其进行编程?
pps 线程不操作任何计数器,除了做 lock (ThreadsMinus) { currentThreads--;}
listPosition = 0;
while (listPosition < siteUrls.Count)
{
if (listPosition == 18)
{
MessageBox.Show("18");
}
currentThreads++;
var t = new Thread(() => Register(siteUrls[listPosition], listPosition));
t.Start();
if (listPosition == 18)
{
MessageBox.Show("18");
}
while (currentThreads >= maxThreads)
{
Thread.Sleep(50);
}
listPosition++;
}