WaitHandle.WaitOne Method (System.Threading)
发布时间:2026-09-10 | 浏览:1
Access to this page requires authorization. You can try signing in or changing directories .
Access to this page requires authorization. You can try changing directories .
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Blocks the current thread until the current WaitHandle receives a signal.
Blocks the current thread until the current WaitHandle receives a signal.
Blocks the current thread until the current WaitHandle receives a signal, using a 32-bit signed integer to specify the time interval in milliseconds.
Blocks the current thread until the current instance receives a signal, using a TimeSpan to specify the time interval.
Blocks the current thread until the current WaitHandle receives a signal, using a 32-bit signed integer to specify the time interval and specifying whether to exit the synchronization domain before the wait.
Blocks the current thread until the current instance receives a signal, using a TimeSpan to specify the time interval and specifying whether to exit the synchronization domain before the wait.
Blocks the current thread until the current WaitHandle receives a signal.
true if the current instance receives a signal. If the current instance is never signaled, WaitOne() never returns.
The current instance has already been disposed.
The wait completed because a thread exited without releasing a mutex.
The current instance is a transparent proxy for a WaitHandle in another application domain.
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.
AbandonedMutexException is new in the .NET Framework version 2.0. In previous versions, the WaitOne method returns true when a mutex is abandoned. An abandoned mutex often indicates a serious coding error. In the case of a system-wide mutex, it might indicate that an application has been terminated abruptly (for example, by using Windows Task Manager). The exception contains information useful for debugging.
The caller of this method blocks indefinitely until the current instance receives a signal. 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.
Calling this method overload is equivalent to calling the WaitOne(Int32, Boolean) method overload and specifying -1 or Timeout.Infinite for the first parameter and false for the second parameter.
Override this method to customize the behavior of derived classes.
Blocks the current thread until the current WaitHandle receives a signal, using a 32-bit signed integer to specify the time interval in milliseconds.
The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.
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.
The current instance is a transparent proxy for a WaitHandle in another application domain.
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.
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 .
WaitOne(TimeSpan)
Blocks the current thread until the current instance receives a signal, using a TimeSpan to specify the time interval.
A TimeSpan that represents the number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely.
true if the current instance receives a signal; otherwise, false .
The current instance has already been disposed.
timeout is a negative number other than -1 milliseconds, which represents an infinite time-out.
timeout is greater than Int32.MaxValue .
The wait completed because a thread exited without releasing a mutex.
The current instance is a transparent proxy for a WaitHandle in another application domain.
If timeout 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.
The maximum value for timeout is Int32.MaxValue .
Calling this method overload is the same as calling the WaitOne(TimeSpan, Boolean) overload and specifying false for exitContext .
WaitOne(Int32, Boolean)
Blocks the current thread until the current WaitHandle receives a signal, using a 32-bit signed integer to specify the time interval and specifying whether to exit the synchronization domain before the wait.
The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.
true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it afterward; otherwise, false .
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.
The current instance is a transparent proxy for a WaitHandle in another application domain.
The following example shows how the WaitOne(Int32, Boolean) method overload behaves when it is called within a synchronization domain. First, a thread waits with exitContext set to false and blocks until the wait timeout expires. A second thread executes after the first thread terminates and waits with exitContext set to true . The call to signal the wait handle for this second thread is not blocked, and the thread completes before the wait timeout.
If millisecondsTimeout is zero, the method does not block. It tests the state of the wait handle and returns immediately.
If a mutex is abandoned, an AbandonedMutexException is thrown. An abandoned mutex often indicates a serious coding error. In the case of a system-wide mutex, it might indicate that an application has been terminated abruptly (for example, by using Windows Task Manager). The exception contains information useful for debugging.
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.
Exiting the context
The exitContext parameter has no effect unless this method is called from inside a nondefault managed context. The managed context can be nondefault if your thread is inside a call to an instance of a class derived from ContextBoundObject . Even if you're currently executing a method on a class that isn't derived from ContextBoundObject , like String , you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.
When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing this method. The thread returns to the original nondefault context after the call to this method completes.
Exiting the context can be useful when the context-bound class has the SynchronizationAttribute attribute. In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. If code in the call stack of a member calls this method and specifies true for exitContext , the thread exits the synchronization domain, which allows a thread that's blocked on a call to any member of the object to proceed. When this method returns, the thread that made the call must wait to reenter the synchronization domain.
WaitOne(TimeSpan, Boolean)
Blocks the current thread until the current instance receives a signal, using a TimeSpan to specify the time interval and specifying whether to exit the synchronization domain before the wait.
A TimeSpan that represents the number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely.
true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it afterward; otherwise, false .
true if the current instance receives a signal; otherwise, false .
The current instance has already been disposed.
timeout is a negative number other than -1 milliseconds, which represents an infinite time-out.
timeout is greater than Int32.MaxValue .
The wait completed because a thread exited without releasing a mutex.
The current instance is a transparent proxy for a WaitHandle in another application domain.
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.
If timeout is zero, the method does not block. It tests the state of the wait handle and returns immediately.
If a mutex is abandoned, an AbandonedMutexException is thrown. An abandoned mutex often indicates a serious coding error. In the case of a system-wide mutex, it might indicate that an application has been terminated abruptly (for example, by using Windows Task Manager). The exception contains information useful for debugging.
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.
The maximum value for timeout is Int32.MaxValue .
Exiting the context
The exitContext parameter has no effect unless this method is called from inside a nondefault managed context. The managed context can be nondefault if your thread is inside a call to an instance of a class derived from ContextBoundObject . Even if you're currently executing a method on a class that isn't derived from ContextBoundObject , like String , you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.
When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing this method. The thread returns to the original nondefault context after the call to this method completes.
Exiting the context can be useful when the context-bound class has the SynchronizationAttribute attribute. In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. If code in the call stack of a member calls this method and specifies true for exitContext , the thread exits the synchronization domain, which allows a thread that's blocked on a call to any member of the object to proceed. When this method returns, the thread that made the call must wait to reenter the synchronization domain.
Was this page helpful?
Need help with this topic?
Want to try using Ask Learn to clarify or guide you through this topic?