广州的房地产网站建设,哪个彩票网站做代理反水高,网站开发相关期刊,别墅装修设计在C#中#xff0c;ManualResetEvent 是一个同步事件#xff0c;用于线程间通信。它允许一个或多个等待的线程等待某个事件的发生。当事件被设置为已发生#xff08;或称为“信号”#xff09;状态时#xff0c;所有等待的线程都会被释放#xff0c;并且可以继续执行。
以…在C#中ManualResetEvent 是一个同步事件用于线程间通信。它允许一个或多个等待的线程等待某个事件的发生。当事件被设置为已发生或称为“信号”状态时所有等待的线程都会被释放并且可以继续执行。
以下是 ManualResetEvent 的一些关键特性
初始状态ManualResetEvent 可以被初始化为有信号状态true或无信号状态false。重置即使有线程被释放ManualResetEvent 也可以被重置为无信号状态这样新的等待线程将会等待直到事件再次被设置。释放等待线程当 ManualResetEvent 被设置为有信号状态时它将释放所有等待该事件的线程。
using System;
using System.Threading;class Program
{static ManualResetEvent manualEvent new ManualResetEvent(false); // 初始化为无信号状态static void Main(){// 创建并启动一个线程Thread thread new Thread(DoWork);thread.Start();// 主线程等待事件被设置manualEvent.WaitOne();// 事件被设置后主线程可以继续执行Console.WriteLine(Event was set, main thread continues execution.);// 释放线程资源thread.Join();}static void DoWork(){Console.WriteLine(Worker thread is working...);// 模拟工作Thread.Sleep(2000);// 工作完成后设置事件Console.WriteLine(Worker thread sets the event.);manualEvent.Set();}
}
创建了一个 ManualResetEvent 对象并将其初始化为无信号状态。主线程创建了一个工作线程并在工作线程开始执行后调用了 WaitOne 方法等待事件。工作线程在完成工作后调用了 Set 方法来设置事件这将导致主线程从 WaitOne 方法返回并继续执行。
ManualResetEvent 通常用于需要多个线程等待单一事件的场景。与之相对的是 AutoResetEvent它在每次只释放一个等待的线程如果需要释放多个线程必须再次设置事件。