Creating or destroying a thread
takes a fair amount of work.
Therefore, if you pool threads, your program executes more
efficiently since you get rid of the overhead associated with
creating and destroying threads. There is one thread pool per
process. To queue work to execute by this pool of worker
threads, call any of the ThreadPool
static methods. QueueUserWorkItem( ) queues a
delegate to execute when one of the pool's threads
becomes free. RegisterWaitForSingleObject( ) takes
a WaitHandle and executes the specified method
either when the WaitHandle is in the signaled
state or when a time-out occurs. BindHandle( ) and
UnsafeQueueUserWorkItem( ) are provided for
compatibility with the Win32 API.
public sealed class ThreadPool {
// Public Static Methods
public static bool BindHandle(IntPtr osHandle);
public static void GetAvailableThreads(out int workerThreads, out int completionPortThreads);
public static void GetMaxThreads(out int workerThreads, out int completionPortThreads);
public static void GetMinThreads(out int workerThreads, out int completionPortThreads);
public static bool QueueUserWorkItem(WaitCallback callBack);
public static bool QueueUserWorkItem(WaitCallback callBack, object state);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
public static bool SetMinThreads(int workerThreads, int completionPortThreads);
public static bool UnsafeQueueUserWorkItem(WaitCallback callBack, object state);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject,
WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
}