亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

C# ManualResetEvent怎樣正確使用

c#
小樊
83
2024-10-12 08:37:02
欄目: 編程語言

ManualResetEvent是C#中一個非常有用的同步原語,它允許一個或多個線程等待,直到另一個線程設置事件。以下是如何正確使用ManualResetEvent的基本步驟:

  1. 創建ManualResetEvent實例

首先,你需要創建一個ManualResetEvent的實例。你可以通過調用其構造函數并傳入一個布爾值來做到這一點。如果傳入true,則事件初始化為已信號狀態;如果傳入false,則事件初始化為非信號狀態。

ManualResetEvent manualResetEvent = new ManualResetEvent(false);
  1. 在等待線程中使用ManualResetEvent

當你希望線程等待某個事件發生時,你可以調用ManualResetEventWaitOne方法。這個方法會阻塞當前線程,直到事件變為已信號狀態。你可以通過傳入一個表示超時時間的參數來防止線程無限期地等待。

manualResetEvent.WaitOne(TimeSpan.FromSeconds(5));

在上面的例子中,線程將等待最多5秒鐘,然后繼續執行。 3. 在設置線程中使用ManualResetEvent

當你希望喚醒等待的線程時,你可以調用ManualResetEventSet方法。這將把事件設置為已信號狀態,從而喚醒所有等待該事件的線程。

manualResetEvent.Set();
  1. 清理資源

在使用完ManualResetEvent后,你應該調用其Close方法來釋放與其關聯的資源。但是,從.NET Framework 4.0開始,ManualResetEvent類實現了IDisposable接口,因此你應該使用using語句來確保資源被正確釋放。

using (ManualResetEvent manualResetEvent = new ManualResetEvent(false))
{
    // 使用manualResetEvent的代碼
}

這是一個簡單的示例,展示了如何使用ManualResetEvent來同步線程:

using System;
using System.Threading;

class Program
{
    static ManualResetEvent manualResetEvent = new ManualResetEvent(false);

    static void Main()
    {
        Thread thread1 = new Thread(DoWork);
        Thread thread2 = new Thread(DoWork);

        thread1.Start();
        thread2.Start();

        // 讓線程1完成工作
        manualResetEvent.Set();

        thread1.Join();
        thread2.Join();
    }

    static void DoWork()
    {
        Console.WriteLine("線程開始等待事件...");
        manualResetEvent.WaitOne(); // 阻塞,直到事件被設置
        Console.WriteLine("線程繼續執行...");
    }
}

在這個示例中,我們創建了兩個線程,它們都調用DoWork方法。在DoWork方法中,線程首先調用manualResetEvent.WaitOne()來阻塞自己,直到事件被設置為已信號狀態。然后,主線程調用manualResetEvent.Set()來喚醒等待的線程。最后,兩個線程繼續執行并輸出消息。

0
金溪县| 郧西县| 南川市| 农安县| 黄大仙区| 全州县| 鄂尔多斯市| 遵义县| 筠连县| 巴彦淖尔市| 海兴县| 咸丰县| 上犹县| 道孚县| 穆棱市| 宜昌市| 元朗区| 金华市| 诸城市| 于田县| 东乌| 门头沟区| 合山市| 雅安市| 曲靖市| 中山市| 内乡县| 安福县| 普陀区| 五寨县| 定远县| 黄骅市| 邯郸市| 郎溪县| 措勤县| 惠东县| 进贤县| 鄂托克前旗| 宜良县| 达拉特旗| 兴宁市|