天天看點

C#如何判斷線程池中所有的線程是否已經完成

其實很簡單用ThreadPool.RegisterWaitForSingleObject方法注冊一個定時檢查線程池的方法,在檢查線程的方法内調用ThreadPool.GetAvailableThreads與ThreadPool.GetMaxThreads并比較兩個方法傳回的值是不是相等,相等表示線池内所有的線程已經完成.
//每秒檢次一次線程池的狀态
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);
      //此處加入所有線程完成後的處理代碼

      
               
            }
            

        }
           

  

轉載于:https://www.cnblogs.com/xiaofengfeng/archive/2012/12/18/2823339.html

c#