中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
宁明县| 徐汇区| 连云港市| 册亨县| 新泰市| 交口县| 长丰县| 公主岭市| 安达市| 竹北市| 南漳县| 北宁市| 香河县| 子洲县| 漳平市| 张家港市| 吉首市| 正定县| 佛冈县| 阿荣旗| 颍上县| 黔江区| 赞皇县| 化德县| 邯郸县| 汤阴县| 镇平县| 博爱县| 辉南县| 辽阳市| 扎兰屯市| 衡水市| 凤城市| 玉田县| 洱源县| 桃源县| 泗阳县| 武定县| 枣阳市| 和静县| 象州县|