C# ManualResetEvent 类的用法

先说是一下 ManualResetEvent 是一线程用来控制别一个线程的信号。大家可以把它看成 操作系统原理中说到的pv操作

如下图所说是 ManualResetEvent 对象起一个信使的作用。

ManualResetEvent 对象的两个控制方法。
1、this.manualEvent.Reset(); //将事件状态设置为非终止状态,导致线程阻止。
2、this.manualEvent.Set(); //将事件状态设置为终止状态,允许一个或多个等待线程继续。

说了这么多光说不做还真没有用,接下来看代码!

class MyThread

        {

            Thread t = null;

            ManualResetEvent manualEvent = new ManualResetEvent(true);//为trur,一开始就可以执行

            private void Run()

            {

                while (true)

                {

                    this.manualEvent.WaitOne();

                    Console.WriteLine("这里是  {0}", Thread.CurrentThread.ManagedThreadId);

                    Thread.Sleep(5000);

                }

            }

            public void Start()

            {

                this.manualEvent.Set();

            }

            public void Stop()

            {

                this.manualEvent.Reset();

            }

            public MyThread()

            {

                t = new Thread(this.Run);

                t.Start();

            }

        }

在 main 方法中要用到上面的类

static void Main(string[] args)

        {

            MyThread myt = new MyThread();

            while (true)

            {

                Console.WriteLine("输入 stop后台线程挂起 start 开始执行!");

                string str = Console.ReadLine();

                if (str.ToLower().Trim() == "stop")

                {

                    myt.Stop();

                }

                if (str.ToLower().Trim() == "start")

                {

                    myt.Start();

                }

            }

        }

原理就说完了我们来看一下程序运行的结果!

文章转载自C# ManualResetEvent 类的用法,感谢作者 蒋乐兴 提供好文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值