不包括
哦,但是这样的话,我这段代码根本停不下来。没有什么道理啊,到最后始终都有两个活动线程
if (maxThreads == availableThread-1)
{
MessageBox.Show("线程池已空闲 350 line");
//UpdateProgress_Invoke(progress);//防止线程池完成后,界面显示的进度滞后;
//MessageBox.Show("界面最后一次更新已经执行");
Crawler_save_to_xml();
Crawler_Finish();
break;
}
//使用委托更新进度;
Thread.Sleep(1000);
UpdateProgress_Invoke(progress);
//使用委托进行调试信息输出;
PrintInfo_Invoke(maxThreads-availableThread);
@原始滴滴: 那只能说明你直接或间接使用了 ThreadPool 中的线程池。你可以在调试时选择“暂停”,然后在“线程”窗口中看到当前有哪些线程,以及它们正在执行的方法。
@原始滴滴: 你为什么要判断线程池中可用线程数量?线程池中有些线程是clr用的,类似像gc,线程池线程回收,finalizer线程等。如果你要在挂在vs下debug还会多个辅助线程。
@Launcher: 哦,会用了
@Daniel Cai: 请问你的意思是说,这样判断不准确吗? 如果只有线程池,没有方式启动的其他线程的情况下,这个是可行的啊。
@原始滴滴: 问题是你判断这个是做什么用途的?
@Daniel Cai: 用来判断是否退出线程滴,已经发现错误了,是我的爬虫url队列一直有个是抛异常的,然后我把抛异常的都放回队列,导致了一直有个url在队列中,所以停不下来
@原始滴滴: 恩,可以暂停线程,让我找出了问题所在.3q
4.0下CountdownEvent专门做计数的。
4.0以下版本可以自己在EventWaitHandle上做包装达到相同功能。
没必要通过这种暴力方式来判断。
好滴,我试下