91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c# autoresetevent如何使用

c#
小樊
81
2024-11-18 10:57:05
欄目: 編程語言

AutoResetEvent 是 C# 中一種非常有用的同步原語,它允許一個或多個線程等待某個條件成立

  1. 首先,導入 System.Threading 命名空間。
using System.Threading;
  1. 創建一個 AutoResetEvent 實例。你可以通過調用 new AutoResetEvent(false) 來創建一個初始狀態為未觸發的 AutoResetEvent。參數 false 表示事件在創建時處于未觸發狀態。你也可以傳遞一個布爾值作為初始狀態,如果傳遞 true,則表示事件在創建時處于已觸發狀態。
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
  1. 在需要等待事件的線程中,使用 WaitOne() 方法來阻塞線程,直到事件被觸發。這個方法會釋放一個線程的鎖,讓其他線程可以繼續執行。當事件被觸發時,WaitOne() 方法會返回 true,并且重新設置事件的初始狀態為未觸發。如果事件未被觸發,WaitOne() 方法會阻塞線程,直到事件被觸發。
autoResetEvent.WaitOne(); // 阻塞線程,等待事件被觸發
  1. 在觸發事件的線程中,使用 Set() 方法來設置事件的狀態為已觸發。這個方法會釋放所有等待該事件的線程的鎖,讓它們可以繼續執行。
autoResetEvent.Set(); // 觸發事件,喚醒等待的線程

下面是一個簡單的示例,展示了如何使用 AutoResetEvent 來同步兩個線程:

using System;
using System.Threading;

class Program
{
    static AutoResetEvent autoResetEvent = new AutoResetEvent(false);

    static void Main()
    {
        Thread t1 = new Thread(ThreadMethod1);
        Thread t2 = new Thread(ThreadMethod2);

        t1.Start();
        t2.Start();

        t1.Join();
        t2.Join();
    }

    static void ThreadMethod1()
    {
        Console.WriteLine("Thread 1: Waiting for event...");
        autoResetEvent.WaitOne(); // 阻塞線程,等待事件被觸發
        Console.WriteLine("Thread 1: Event triggered.");
    }

    static void ThreadMethod2()
    {
        Thread.Sleep(1000); // 讓線程 1 先執行
        Console.WriteLine("Thread 2: Triggering event...");
        autoResetEvent.Set(); // 觸發事件,喚醒等待的線程
    }
}

在這個示例中,ThreadMethod1 會阻塞等待 AutoResetEvent 被觸發,而 ThreadMethod2 在休眠 1 秒后觸發事件。當事件被觸發時,ThreadMethod1會繼續執行。

0
工布江达县| 阜宁县| 拜城县| 隆子县| 芦溪县| 曲水县| 江口县| 桃园市| 普安县| 临湘市| 万安县| 灌云县| 廊坊市| 扶风县| 光泽县| 体育| 胶州市| 洛浦县| 徐州市| 兴安县| 石家庄市| 建阳市| 扶沟县| 会东县| 清河县| 东乡县| 额尔古纳市| 宜阳县| 谷城县| 泰兴市| 宁晋县| 莎车县| 商城县| 通州市| 中卫市| 桐梓县| 白城市| 广昌县| 额济纳旗| 弥勒县| 利辛县|