ManualResetEventSlim 类 简单使用方法

本文通过实例解析如何在C#中使用ManualResetEventSlim实现线程间的协调,展示了如何设置和重置该事件来控制线程执行。通过创建控制台应用演示了开关操作,帮助理解其在数据同步中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作中需要用到数据同步的功能,在阅读公司源码的过程中遇到了ManualResetEventSlim这个玩意的使用,看到有点懵圈,后来查了一下资料以后,写了个小DEMO出来,帮助大家理解一下用法,大家可以创建一个控制台应用跑一下就行了

static void Main(string[] args)
        {
            ManualResetEventSlim _mainEvent1 = new ManualResetEventSlim(true);
            ManualResetEventSlim _mainEvent2 = new ManualResetEventSlim(true);
            Task.Run(() =>
            {
                DoSome("毛熊", _mainEvent1);
            });
            Task.Run(() =>
            {
                DoSome("鹰酱", _mainEvent2);
            });
            while (true) {
                var aa = Console.ReadKey().KeyChar.ToString();
                Console.WriteLine(" \r\n");
                if (aa == "1")
                {
                    _mainEvent1.Set();
                    Console.WriteLine(" \r\n");
                    Console.WriteLine("毛熊可以说话了,按2禁言它");
                    _mainEvent1.Set();
                }
                else if (aa == "2")
                {
                    _mainEvent1.Reset();
                    Console.WriteLine(" \r\n");
                    Console.WriteLine("毛熊被禁言了,按1可以恢复");
                }
                else if (aa == "3")
                {
                    _mainEvent2.Set();
                    Console.WriteLine(" \r\n");
                    Console.WriteLine("鹰酱可以说话了,按4禁言鹰酱");
                }
                else if (aa == "4")
                {
                    _mainEvent2.Reset();
                    Console.WriteLine(" \r\n");
                    Console.WriteLine("鹰酱被禁言了,按3可以恢复");
                }
                else {
                    Console.WriteLine($"兔子:你乱按是木用的啦");
                }
               
            }
        }

        public static void DoSome(string tname, ManualResetEventSlim ms)
        {
            while (true) {
                
                Thread.Sleep(TimeSpan.FromSeconds(3));
                ms.Wait();
                Console.WriteLine($"my name is {tname}, i am running");
                
            }
        }

从上面的例子可以看出来,ManualResetEventSlim就像是一个开关一样,可以利用它的Set()和Reset()来控制线程的运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值