This article mainly introduces the use of ManualResetEvent in detail, which has certain reference value. Interested friends can refer to it
The examples in this article share how to use ManualResetEvent for your reference. The specific content is as follows
1. Source code download:
Download address: ManualResetEvent
Demo:
2. Detailed explanation of ManualResetEvent
ManualResetEvent allows threads to communicate with each other by sending signals. Typically, this communication involves tasks that one thread must complete before other threads can proceed. When a thread starts an activity (this activity must complete before other threads can start), it calls Reset to put the ManualResetEvent into a non-terminating state , and this thread can be considered to control the ManualResetEvent. The thread calling WaitOne on ManualResetEvent will block and wait for the signal. When the controlling thread completes its activity, it calls Set to signal that the waiting thread can continue. and release all waiting threads. Once it is terminated, a ManualResetEvent will remain terminated (i.e. the thread calling WaitOne will return immediately and not block) until it is manually reset. The initial state of a ManualResetEvent can be controlled by passing a Boolean value to the constructor, which is true if the initial state is in the terminated state; false otherwise.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ManualResetEventDemo { class MREDemo { private ManualResetEvent _mre; public MREDemo() { this._mre = new ManualResetEvent(true); } public void CreateThreads() { Thread t1 = new Thread(new ThreadStart(Run)); t1.Start(); Thread t2 = new Thread(new ThreadStart(Run)); t2.Start(); } public void Set() { this._mre.Set(); } public void Reset() { this._mre.Reset(); } private void Run() { string strThreadID = string.Empty; try { while (true) { // 阻塞当前线程 this._mre.WaitOne(); strThreadID = Thread.CurrentThread.ManagedThreadId.ToString(); Console.WriteLine("Thread(" + strThreadID + ") is running..."); Thread.Sleep(5000); } } catch(Exception ex) { Console.WriteLine("线程(" + strThreadID + ")发生异常!错误描述:" + ex.Message.ToString()); } } } }
The above is the detailed content of Detailed explanation of how to use ManualResetEvent in C#. For more information, please follow other related articles on the PHP Chinese website!