ThreadPool.RegisterWaitForSingleObject( ) returns a RegisteredWaitHandle . To cancel a registered wait (either a new one or one that continuously executes), use Unregister( ) . public sealed class RegisteredWaitHandle : MarshalByRefObject { // Public Instance Methods public bool Unregister (WaitHandle waitObject ); // Protected Instance Methods protected override void Finalize ( ); // overrides object } HierarchySystem.Object System.MarshalByRefObject RegisteredWaitHandle Returned ByThreadPool.{RegisterWaitForSingleObject( ) , UnsafeRegisterWaitForSingleObject( )} |