#unity/日常积累

定义

命名空间:

System.Threading

程序集:

System.Runtime.dll

阻止当前线程,直到当前 WaitHandle 收到信号。

重载

展开表

WaitOne()

阻止当前线程,直到当前 WaitHandle 收到信号。

WaitOne(Int32)

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

WaitOne(TimeSpan)

阻止当前线程,直到当前实例收到信号,同时使用 TimeSpan 指定时间间隔。

WaitOne(Int32, Boolean)

阻止当前线程,直到当前的 WaitHandle 收到信号为止,同时使用 32 位带符号整数指定时间间隔,并指定是否在等待之前退出同步域。

WaitOne(TimeSpan, Boolean)

阻止当前线程,直到当前实例收到信号为止,同时使用 TimeSpan 指定时间间隔,并指定是否在等待之前退出同步域。

WaitOne()

阻止当前线程,直到当前 WaitHandle 收到信号。

1
public virtual bool WaitOne ();

返回

Boolean

如果当前实例收到信号,则为 true。 如果当前实例永不发出信号,则 WaitOne() 永不返回。

例外

ObjectDisposedException

已释放当前实例。

AbandonedMutexException

等待结束,因为线程在未释放互斥的情况下退出。

InvalidOperationException

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

示例

下面的代码示例演示如何使用等待句柄来防止进程在等待后台线程完成执行时终止。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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();
    }
}

注解

AbandonedMutexException是 .NET Framework 版本 2.0 中的新增功能。 在以前的版本中, WaitOne 方法在 true 放弃互斥体时返回 。 放弃的互斥通常表示存在严重的编码错误。 对于系统范围的互斥体,这可能指示应用程序已突然终止,例如,使用 Windows 任务管理器) (。 异常包含对调试有用的信息。

此方法的调用方无限期阻止,直到当前实例收到信号。 使用此方法阻止, WaitHandle 直到 收到来自另一个线程的信号,例如在异步操作完成时生成。 有关详细信息,请参阅 IAsyncResult 接口。

调用此方法重载等效于调用WaitOne(Int32, Boolean)方法重载,并为第一个参数和第二个参数false指定 -1 或 Timeout.Infinite 。

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

适用于

.NET 8 和其他版本

产品

版本

.NET

Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8 

.NET Framework

1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 

.NET Standard

1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1 

UWP

10.0 

Xamarin.iOS

10.8 

Xamarin.Mac

3.0