ManualResetEvent怎么在C#项目中使用
这期内容当中小编将会给大家带来有关ManualResetEvent怎么在C#项目中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
第一、简单介绍
ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态,此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。
当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。一旦它被终止,ManualResetEvent 将保持终止状态(即对 WaitOne 的调用的线程将立即返回,并不阻塞),直到它被手动重置。可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态,
如果初始状态处于终止状态,为 true;否则为 false。
第二、代码演示
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading; usingSystem.Threading.Tasks; namespaceConsoleApplication2 { classMyThread { Threadt=null; ManualResetEventmanualEvent=newManualResetEvent(true);//为trur,一开始就可以执行 privatevoidRun() { while(true) { this.manualEvent.WaitOne(); Console.WriteLine("线程id:{0}",Thread.CurrentThread.ManagedThreadId); Thread.Sleep(2000); } } publicvoidStart() { this.manualEvent.Set(); } publicvoidStop() { this.manualEvent.Reset(); } publicMyThread() { t=newThread(this.Run); t.Start(); } } classProgram { staticvoidMain(string[]args) { MyThreadmyt=newMyThread(); while(true) { Console.WriteLine("输入stop后台线程挂起start开始执行!"); stringstr=Console.ReadLine(); if(str.ToLower().Trim()=="stop") { Console.WriteLine("线程停止运行...\n"); myt.Stop(); } if(str.ToLower().Trim()=="start") { Console.WriteLine("线程开启运行...\n"); myt.Start(); } } } } }
运行测试结果
上述就是小编为大家分享的ManualResetEvent怎么在C#项目中使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
Web应用从零开始,初学者友好型开发教程
-
容器化最佳实践:Docker 与 Kubernetes 在微服务架构中的协同设计
-
AWS Cloud9 使用攻略:云端 IDE 如何无缝集成 Lambda 与 S3 服务?
-
Heroku vs AWS Elastic Beanstalk:快速部署 Web 应用的平台对比
-
Kubernetes 集群部署避坑:资源调度、服务发现与滚动更新策略
-
Docker 镜像优化指南:分层构建、瘦身技巧与多阶段编译实践
-
Postman 接口测试全流程:从 API 设计到自动化测试脚本编写
-
pytest 框架进阶:自定义 fixture、插件开发与持续集成集成方案
-
JUnit 5 新特性:参数化测试、扩展模型与微服务测试实践
-
Chrome DevTools 性能分析:FPS 监控、内存快照与网络请求优化指南