public PrivateThreadPool(int maxThreads, bool useFXThreadPool)
 {
     this.exceptions = ArrayList.Synchronized(new ArrayList());
     if ((maxThreads < MinimumCount) || (maxThreads > MaximumCount))
     {
         throw new ArgumentOutOfRangeException("maxThreads", "must be between " + MinimumCount.ToString() + " and " + MaximumCount.ToString() + " inclusive");
     }
     this.counter        = new WaitableCounter(maxThreads);
     this.useFXTheadPool = useFXThreadPool;
 }
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         this.Drain();
         if (this.counter != null)
         {
             this.counter.Dispose();
             this.counter = null;
         }
     }
     base.Dispose(disposing);
 }
 // Methods
 public CounterToken(WaitableCounter parent, int index)
 {
     this.parent = parent;
     this.index  = index;
 }
 // Methods
 public CounterToken(WaitableCounter parent, int index)
 {
     this.parent = parent;
     this.index = index;
 }
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         this.Drain();
         if (this.counter != null)
         {
             this.counter.Dispose();
             this.counter = null;
         }
     }
     base.Dispose(disposing);
 }
 public PrivateThreadPool(int maxThreads, bool useFXThreadPool)
 {
     this.exceptions = ArrayList.Synchronized(new ArrayList());
     if ((maxThreads < MinimumCount) || (maxThreads > MaximumCount))
     {
         throw new ArgumentOutOfRangeException("maxThreads", "must be between " + MinimumCount.ToString() + " and " + MaximumCount.ToString() + " inclusive");
     }
     this.counter = new WaitableCounter(maxThreads);
     this.useFXTheadPool = useFXThreadPool;
 }