WaitHandle.WaitOne 方法 ()
当在派生类中重写时,阻塞当前线程,直到当前的 WaitHandle 收到信号。
命名空间:System.Threading
程序集:mscorlib(在 mscorlib.dll 中)
AbandonedMutexException 是 .NET Framework 2.0 版中新增的。在以前的版本中,如果放弃 Mutex,WaitOne 方法则返回 true。出现遗弃的 Mutex 表明存在严重的编码错误。该异常中包含的信息对调试很有帮助。
此方法的调用方无限期阻塞,直到当前实例收到信号。使用此方法一直阻止到 WaitHandle 收到来自另一个线程的信号,例如异步操作完成时生成的信号。有关更多信息,请参见 IAsyncResult 接口。
调用该重载等效于调用 WaitOne(Int32,Boolean) 方法重载,同时为第一个参数指定 -1 或 Timeout.Infinite,为第二个参数指定 false。
重写此方法以自定义派生类的行为。
下面的代码示例说明在进程等待后台线程执行完时,如何使用等待句柄阻止进程终止。
using System; using System.Threading; class WaitOne { static AutoResetEvent autoEvent = new AutoResetEvent(false); static void Main() { Console.WriteLine("Main starting."); ThreadPool.QueueUserWorkItem( new WaitCallback(WorkMethod), autoEvent); // Wait for work method to signal. autoEvent.WaitOne(); Console.WriteLine("Work method signaled.\nMain ending."); } static void WorkMethod(object stateInfo) { Console.WriteLine("Work starting."); // Simulate time spent working. Thread.Sleep(new Random().Next(100, 2000)); // Signal that work is finished. Console.WriteLine("Work ending."); ((AutoResetEvent)stateInfo).Set(); } }
import System.*; import System.Threading.*; import System.Threading.Thread; class WaitOne { private static AutoResetEvent autoEvent = new AutoResetEvent(false); public static void main(String[] args) { Console.WriteLine("Main starting."); ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod), autoEvent); // Wait for work method to signal. autoEvent.WaitOne(); Console.WriteLine("Work method signaled.\nMain ending."); } //main static void WorkMethod(Object stateInfo) { Console.WriteLine("Work starting."); // Simulate time spent working. Thread.Sleep((new Random()).Next(100, 2000)); // Signal that work is finished. Console.WriteLine("Work ending."); ((AutoResetEvent)(stateInfo)).Set(); } //WorkMethod } //WaitOne
Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。