Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

WaitHandle::WaitOne Method (Int32)

Blocks the current thread until the current WaitHandle receives a signal, using a 32-bit signed integer to specify the time interval in milliseconds.

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

virtual bool WaitOne(
	int millisecondsTimeout


Type: System::Int32

The number of milliseconds to wait, or Timeout::Infinite (-1) to wait indefinitely.

Return Value

Type: System::Boolean
true if the current instance receives a signal; otherwise, false.


The current instance has already been disposed.


millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.


The wait completed because a thread exited without releasing a mutex. This exception is not thrown on Windows 98 or Windows Millennium Edition.


The current instance is a transparent proxy for a WaitHandle in another application domain.

If millisecondsTimeout is zero, the method does not block. It tests the state of the wait handle and returns immediately.

The caller of this method blocks until the current instance receives a signal or a time-out occurs. Use this method to block until a WaitHandle receives a signal from another thread, such as is generated when an asynchronous operation completes. For more information, see the IAsyncResult interface.

Override this method to customize the behavior of derived classes.

Calling this method overload is the same as calling the WaitOne(Int32, Boolean) overload and specifying false for exitContext.

The following code example shows how to use a wait handle to keep a process from terminating while it waits for a background thread to finish executing.

using namespace System;
using namespace System::Threading;
ref class WaitOne

   static void WorkMethod( Object^ stateInfo )
      Console::WriteLine( "Work starting." );

      // Simulate time spent working.
      Thread::Sleep( (gcnew Random)->Next( 100, 2000 ) );

      // Signal that work is finished.
      Console::WriteLine( "Work ending." );


int main()
   Console::WriteLine( "Main starting." );
   AutoResetEvent^ autoEvent = gcnew AutoResetEvent( false );
   ThreadPool::QueueUserWorkItem( gcnew WaitCallback( &WaitOne::WorkMethod ), autoEvent );

   // Wait for work method to signal. 
   if ( autoEvent->WaitOne( 1000 ) )
      Console::WriteLine( "Work method signaled." );
      Console::WriteLine( "Timed out waiting for work " 
      "method to signal." );

   Console::WriteLine( "Main ending." );

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5 SP1, 3.0 SP2, 2.0 SP2

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
© 2015 Microsoft