时间:2021-05-20
第一、简单介绍
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;using System.Threading.Tasks; namespace ConsoleApplication2{ class MyThread { Thread t = null; ManualResetEvent manualEvent = new ManualResetEvent(true);//为trur,一开始就可以执行 private void Run() { while (true) { this.manualEvent.WaitOne(); Console.WriteLine("线程id:{0}", Thread.CurrentThread.ManagedThreadId); Thread.Sleep(2000); } } public void Start() { this.manualEvent.Set(); } public void Stop() { this.manualEvent.Reset(); } public MyThread() { t = new Thread(this.Run); t.Start(); } } class Program { static void Main(string[] args) { MyThread myt = new MyThread(); while (true) { Console.WriteLine("输入 stop 后台线程挂起 start 开始执行!"); string str = Console.ReadLine(); if (str.ToLower().Trim() == "stop") { Console.WriteLine("线程停止运行...\n"); myt.Stop(); } if (str.ToLower().Trim() == "start") { Console.WriteLine("线程开启运行...\n"); myt.Start(); } } } }}运行测试结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C#中Array和ArrayList详解及区别一、Array的用法type[]typename=newtype[size];或者type[]typename=n
本文实例汇总了C#中@的用法,对C#程序设计来说有不错的借鉴价值。具体如下:一字符串中的用法1.学过C#的人都知道C#中字符串常量可以以@开头声名,这样的优点是
C#中timer类的用法关于C#中timer类在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threa
sizeof是C#中非常重要的方法,本文就以实例形式分析C#中sizeof的用法。分享给大家供大家参考。具体分析如下:在C#中,sizeof用来计算类型的大小,
搞过C#多线程的人对其中的AutoResetEvent和ManualResetEvent这两个类都理解,其中的WaitOne()方法和Set()以及Reset(