要查看英语原文,请勾选“英语”复选框。也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语
本文档已存档,并且将不进行维护。

WaitHandle.WaitOne 方法 (Int32)

阻止当前线程,直到当前 WaitHandle 收到信号,同时使用 32 位带符号整数指定时间间隔。

命名空间:  System.Threading
程序集:  mscorlib(在 mscorlib.dll 中)

public virtual bool WaitOne(
	int millisecondsTimeout
)

参数

millisecondsTimeout
类型:System.Int32
等待的毫秒数,或为 Timeout.Infinite (-1),表示无限期等待。

返回值

类型:System.Boolean
如果当前实例收到信号,则为 true;否则为 false

异常条件
ObjectDisposedException

当前实例已被释放。

ArgumentOutOfRangeException

millisecondsTimeout 是一个非 -1 的负数,而 -1 表示无限期超时。

AbandonedMutexException

线程退出时未释放互斥体,等待过程已终止。 在 Windows 98 或 Windows Millennium Edition 中不引发此异常。

InvalidOperationException

当前实例是另一个应用程序域中的 WaitHandle 的透明代理。

如果 millisecondsTimeout 为零,则该方法不会进入阻止状态。 该方法会测试等待句柄的状态并立即返回。

该方法的调用方在当前实例收到信号或发生超时前将被阻止。 使用此方法一直阻止到 WaitHandle 收到来自另一个线程的信号,例如异步操作完成时生成的信号。 有关更多信息,请参见 IAsyncResult 接口。

重写此方法以自定义派生类的行为。

调用此方法重载等效于调用 WaitOne(Int32, Boolean) 重载和将 exitContext 指定为 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.
        if(autoEvent.WaitOne(1000))
        {
            Console.WriteLine("Work method signaled.");
        }
        else
        {
            Console.WriteLine("Timed out waiting for work " +
                "method to signal.");
        }
        Console.WriteLine("Main 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();
    }
}


.NET Framework

受以下版本支持:4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求
显示: