首页 > 编程语言 > 详细

C#如何判断线程池中所有的线程是否已经完成(转)

时间:2014-06-07 23:35:00      阅读:459      评论:0      收藏:0      [点我收藏+]

其 实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用 ThreadPool.GetAvailableThreads与ThreadPool.GetMaxThreads并比较两个方法返回的值是不是相等, 相等表示线池内所有的线程已经完成.

bubuko.com,布布扣
//每秒检次一次线程池的状态
RegisteredWaitHandle rhw = ThreadPool.RegisterWaitForSingleObject(AutoResetEvent(false), this.CheckThreadPool, null, 1000, false);
 
 
   //检查线程池的方法
       private void CheckThreadPool(object state, bool timeout)
        {
            int workerThreads = 0;
            int maxWordThreads = 0;
            //int 
            int compleThreads = 0;
            ThreadPool.GetAvailableThreads(out workerThreads, out compleThreads);
            ThreadPool.GetMaxThreads(out maxWordThreads, out compleThreads);
            //当可用的线数与池程池最大的线程相等时表示线程池中所有的线程已经完成
            if (workerThreads == maxWordThreads)
            {
                //当执行此方法后CheckThreadPool将不再执行
                rhw.Unregister(null);
      //此处加入所有线程完成后的处理代码
 
      
                
            }
             
 
        }
bubuko.com,布布扣

 

C#如何判断线程池中所有的线程是否已经完成(转),布布扣,bubuko.com

C#如何判断线程池中所有的线程是否已经完成(转)

原文:http://www.cnblogs.com/rainbowzc/p/3774717.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!