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);
      //此處加入所有線程完成后的處理代碼

      
               
            }
            

        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM