程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#如何判斷線程池中所有的線程是否已經完成

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

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

      
               
            }
            

        }

 

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved