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

溫馨提示×

C# ManualResetEvent狀態改變如何監聽

c#
小樊
82
2024-10-12 09:30:02
欄目: 編程語言

在C#中,ManualResetEvent是一個用于同步線程的類,它有兩個狀態:SetReset。當ManualResetEvent的狀態從Reset變為Set時,等待該事件的線程將被釋放。為了監聽ManualResetEvent的狀態改變,你可以使用WaitOneWaitManyWaitAny方法。

以下是一個簡單的示例,展示了如何使用ManualResetEvent和事件監聽器來監聽狀態改變:

using System;
using System.Threading;

class Program
{
    static ManualResetEvent _event = new ManualResetEvent(false); // 初始狀態為Reset
    static event EventHandler<bool> _stateChanged; // 定義一個事件,當狀態改變時觸發

    static void Main()
    {
        // 注冊事件監聽器
        _stateChanged += OnStateChanged;

        // 啟動一個線程,改變ManualResetEvent的狀態
        Thread thread = new Thread(StateChangedThread);
        thread.Start();

        // 主線程等待事件觸發
        _event.WaitOne();
        Console.WriteLine("ManualResetEvent狀態已改變");

        // 取消注冊事件監聽器
        _stateChanged -= OnStateChanged;

        thread.Join();
    }

    static void OnStateChanged(object sender, bool state)
    {
        Console.WriteLine($"ManualResetEvent狀態已變為: {state}");
        _event.Set(); // 改變狀態為Set,喚醒等待的線程
    }

    static void StateChangedThread()
    {
        Thread.Sleep(1000); // 模擬一些操作
        _event.Set(); // 改變狀態為Set,喚醒等待的線程
    }
}

在這個示例中,我們創建了一個ManualResetEvent實例,并將其初始狀態設置為Reset。我們還定義了一個事件_stateChanged,當ManualResetEvent的狀態改變時觸發。

Main方法中,我們注冊了事件監聽器OnStateChanged,并啟動了一個新線程StateChangedThread,該線程將在1秒后改變ManualResetEvent的狀態。主線程使用_event.WaitOne()等待事件觸發,然后輸出"ManualResetEvent狀態已改變"。最后,我們取消注冊事件監聽器并等待新線程結束。

0
罗山县| 敦化市| 沈阳市| 武穴市| 安化县| 濮阳县| 阿拉善右旗| 桃园县| 九寨沟县| 柘荣县| 北京市| 永定县| 神木县| 临邑县| 北安市| 沈丘县| 雷山县| 昆明市| 莎车县| 佛学| 大关县| 盐边县| 钦州市| 莒南县| 利川市| 方城县| 肇东市| 顺义区| 红原县| 无棣县| 民和| 宿州市| 保亭| 丰都县| 临猗县| 拉孜县| 抚远县| 廉江市| 万山特区| 长子县| 兴安县|