Home  >  Article  >  Backend Development  >  Detailed explanation of how to use ManualResetEvent in C#

Detailed explanation of how to use ManualResetEvent in C#

黄舟
黄舟Original
2017-06-04 09:44:083288browse

This article mainly introduces the use of ManualResetEvent in detail, which has certain reference value. Interested friends can refer to it

The example in this article shares how to use ManualResetEvent for your reference. The specific content is as follows

1. Source code download:

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());
   }
  }
 
 }
}
rrree

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn