本文实例为大家分享了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#
# ManualResetEvent
# C#中多线程ManualResetEvent 与 AutoResetEvent 区别
# C# AutoResetEvent的具体使用方法
# C#中AutoResetEvent控制线程用法小结
# C#多线程之线程通讯(AutoResetEvent)
# C#使用AutoResetEvent实现同步
# C# ManualResetEvent用法详解
# C#中ManualResetEvent用法详解
# C# AutoResetEvent和ManualResetEvent的实现示例
# 下载地址
# 可以通过
# 大家分享
# 则为
# 具体内容
# 大家多多
# 到它
# 源码下载
# 即对
# 完成后
# 发信号
# 被视为
# 布尔值
# true
# input
# ReadLine
# false
# Collections
# System
# Linq
相关文章:
如何生成腾讯云建站专用兑换码?
建站之星安装后如何自定义网站颜色与字体?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
建站168自助建站系统:快速模板定制与SEO优化指南
C++时间戳转换成日期时间的步骤和示例代码
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
小型网站建站如何选择虚拟主机?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
油猴 教程,油猴搜脚本为什么会网页无法显示?
C++如何使用std::optional?(处理可选值)
Java解压缩zip - 解压缩多个文件或文件夹实例
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Swift中switch语句区间和元组模式匹配
如何挑选高效建站主机与优质域名?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
建站之星如何通过成品分离优化网站效率?
高防服务器:AI智能防御DDoS攻击与数据安全保障
,购物网站怎么盈利呢?
如何快速生成ASP一键建站模板并优化安全性?
如何快速生成可下载的建站源码工具?
常州企业建站如何选择最佳模板?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
招商网站制作流程,网站招商广告语?
如何制作网站标识牌,动态网站如何制作(教程)?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
如何在宝塔面板创建新站点?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何在万网自助建站平台快速创建网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
如何在香港服务器上快速搭建免备案网站?
如何在景安服务器上快速搭建个人网站?
建站主机选择指南:服务器配置与SEO优化实战技巧
为什么Go需要go mod文件_Go go mod文件作用说明
电商网站制作价格怎么算,网上拍卖流程以及规则?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星后台密码遗忘?如何快速找回?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何零基础在云服务器搭建WordPress站点?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何配置IIS站点权限与局域网访问?
*请认真填写需求信息,我们会在24小时内与您取得联系。