C#ManualResetEvent类

2025-04-29  本文已影响0人  小羊爱学习

简介:

在 C# 中,ManualResetEvent 是一个用于线程同步的类,属于 System.Threading 命名空间。它允许一个或多个线程等待某个信号(事件),直到其他线程显式触发该信号为止。与 AutoResetEvent 不同,ManualResetEvent 在触发后会保持信号状态,直到手动重置。

信号状态:

基本用法:

var manualEvent = new ManualResetEvent(initialState: false); // 初始无信号
方法 作用
Set() 将事件设为有信号状态,释放所有等待线程。
Reset() 将事件设为无信号状态,后续的 WaitOne() 会阻塞。
WaitOne() 阻塞当前线程,直到事件变为有信号状态。可以指定超时时间
Dispose() 释放资源(继承自 WaitHandle)。

示例:

private static ManualResetEvent manualEvent = new ManualResetEvent(false);
private void TestManualResetEvent()
{
    Thread worker = new Thread(DoWork);
    worker.Start();

    // 主线程触发信号
    Thread.Sleep(10000);
    Console.WriteLine("主线程发送信号");
    manualEvent.Set(); // 释放工作线程
}
private void DoWork()
{
    Console.WriteLine("工作线程等待信号...");
    bool b = manualEvent.WaitOne(); // 阻塞直到信号触发
    //bool b = manualEvent.WaitOne(1000); // 阻塞直到信号触发或1秒后才往下执行
    // 返回的是信号的状态
    Debug.WriteLine(b);
    Console.WriteLine("工作线程继续执行");
}
上一篇 下一篇

猜你喜欢

热点阅读