C#中的ManualResetEvent类如何使用

959
2023/8/31 14:14:51
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在C#中,ManualResetEvent类用于实现线程的同步和协调。下面是使用ManualResetEvent类的基本方法:

  1. 创建一个ManualResetEvent对象:
ManualResetEvent mre = new ManualResetEvent(false); // 初始状态为未发信号
  1. 等待信号:
mre.WaitOne(); // 阻塞当前线程,直到收到信号
  1. 发送信号:
mre.Set(); // 发送信号,唤醒等待中的线程
  1. 重置信号:
mre.Reset(); // 重置信号,设置为未发信号状态

完整示例:

using System;
using System.Threading;
class Program
{
static ManualResetEvent mre = new ManualResetEvent(false);
static void Main()
{
Thread t1 = new Thread(DoWork);
Thread t2 = new Thread(DoWork);
t1.Start();
t2.Start();
Thread.Sleep(2000); // 等待线程启动
mre.Set(); // 发送信号
Thread.Sleep(2000); // 等待线程结束
mre.Reset(); // 重置信号
mre.Set(); // 发送信号
Console.ReadLine();
}
static void DoWork()
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " Waiting...");
mre.WaitOne(); // 等待信号
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " Resumed...");
}
}

在上述示例中,两个线程t1和t2都会等待收到信号后才会继续执行。调用mre.Set()方法会发送信号,唤醒等待中的线程。调用mre.Reset()方法会重置信号,设置为未发信号状态。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 在C#中使用pgsql时如何防止SQL注入