C# ManualResetEvent使用方法详解
本文实例为大家分享了ManualResetEvent的使用方法,供大家参考,具体内容如下
1. 源码下载:
下载地址:ManualResetEvent
Demo:
2. ManualResetEvent详解
ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态,此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。一旦它被终止,ManualResetEvent 将保持终止状态(即对 WaitOne 的调用的线程将立即返回,并不阻塞),直到它被手动重置。可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态,如果初始状态处于终止状态,为 true;否则为 false。
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()); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ManualResetEventDemo { class Program { static void Main(string[] args) { Console.WriteLine("****************************"); Console.WriteLine("输入\"stop\"停止线程运行..."); Console.WriteLine("输入\"run\"开启线程运行..."); Console.WriteLine("****************************\r\n"); MREDemo objMRE = new MREDemo(); objMRE.CreateThreads(); while (true) { string input = Console.ReadLine(); if (input.Trim().ToLower() == "stop") { Console.WriteLine("线程已停止运行..."); objMRE.Reset(); } else if (input.Trim().ToLower() == "run") { Console.WriteLine("线程开启运行..."); objMRE.Set(); } } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:C#操作word的方法示例
栏 目:C#教程
下一篇:.NET WinForm实现在listview中添加progressbar的方法
本文标题:C# ManualResetEvent使用方法详解
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/5717.html
您可能感兴趣的文章
- 01-10c# ArrayList的使用方法小总结
- 01-10C#中Socket通信用法实例详解
- 01-10C#装箱和拆箱原理详解
- 01-10C#类的多态性详解
- 01-10C#创建不规则窗体的4种方式详解
- 01-10C#中深度复制和浅度复制详解
- 01-10C#.Net ArrayList的使用方法
- 01-10C#中比较常用的DateTime结构的使用方法
- 01-10C#数据结构之队列(Quene)实例详解
- 01-10C#数据结构之顺序表(SeqList)实例详解
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 01-11ajax实现页面的局部加载
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10SublimeText编译C开发环境设置
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10delphi制作wav文件的方法
- 01-10使用C语言求解扑克牌的顺子及n个骰子