This class encapsulates much of the logic for dealing with synchronization handles, which allow much more fine-grained synchronization control than simple thread locking. Once you have references to one or more WaitHandle subclasses, use the static WaitOne( ) or WaitAny( ) methods to obtain a lock on any single handle or all of the handles, respectively. The WaitOne( ) instance method acquires the lock for a specific WaitHandle . If a thread blocks and cannot obtain the necessary locks, it enters the ThreadState.WaitSleepJoin state until the locks can be obtained. public abstract class WaitHandle : MarshalByRefObject, IDisposable { // Public Constructors public WaitHandle ( ); // Public Static Fields public const int WaitTimeout ; // =258 // Protected Static Fields protected static readonly IntPtr InvalidHandle ; // =-1 // Public Instance Properties public virtual IntPtr Handle {set; get; } // Public Static Methods public static bool WaitAll (WaitHandle[ ] waitHandles ); public static bool WaitAll (WaitHandle[ ] waitHandles , int millisecondsTimeout , bool exitContext ); public static bool WaitAll (WaitHandle[ ] waitHandles , TimeSpan timeout , bool exitContext ); public static int WaitAny (WaitHandle[ ] waitHandles ); public static int WaitAny (WaitHandle[ ] waitHandles , int millisecondsTimeout , bool exitContext ); public static int WaitAny (WaitHandle[ ] waitHandles , TimeSpan timeout , bool exitContext ); // Public Instance Methods public virtual void Close ( ); public virtual bool WaitOne ( ); public virtual bool WaitOne (int millisecondsTimeout , bool exitContext ); public virtual bool WaitOne (TimeSpan timeout , bool exitContext ); // Protected Instance Methods protected virtual void Dispose (bool explicitDisposing ); protected override void Finalize ( ); // overrides object } HierarchySystem.Object System.MarshalByRefObject WaitHandle(System.IDisposable) SubclassesAutoResetEvent , ManualResetEvent , Mutex Returned BySystem.IAsyncResult.AsyncWaitHandle , System.IO.Stream.CreateWaitHandle( ) Passed ToRegisteredWaitHandle.Unregister( ) , ThreadPool.{RegisterWaitForSingleObject( ) , UnsafeRegisterWaitForSingleObject( )} , Timer.Dispose( ) |