117.info
人生若只如初见

C#中的ManualResetEvent类如何使用

在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()方法会重置信号,设置为未发信号状态。

未经允许不得转载 » 本文链接:https://www.117.info/ask/feba2AzsLCQVWAVI.html

推荐文章

  • Linux中SIGPIPE产生的原因有哪些

    在Linux中,SIGPIPE信号是在以下情况下产生的: 写入一个已关闭的管道或Socket:当进程向一个已关闭的管道或Socket写入数据时,操作系统会向进程发送SIGPIPE信号...

  • Linux中SIGPIPE问题怎么解决

    在Linux中,SIGPIPE问题的解决方法如下: 忽略SIGPIPE信号:你可以使用signal()函数将SIGPIPE信号的处理方式设置为忽略,使得进程在收到该信号时不会终止。例如:...

  • SQL Server中dbo指的是什么

    dbo是SQL Server中的一個預設的資料庫用戶架構,它代表"database owner",也就是資料庫的所有者。在SQL Server中,所有的表格、視圖、存儲過程、函數等物件都可以...

  • 动态ip云服务器搭建的步骤是什么

    搭建动态IP云服务器的步骤如下:1. 选择云服务提供商:选择一家可靠的云服务提供商,考虑价格、性能、地理位置和可用性等因素。2. 注册账号:在选定的云服务提供...