C# ManualResetEvent 类的用法

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

如下图所说是 ManualResetEvent 对象起一个信使的作用。 
C# 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();

            }

        }
  •  
  • 53

在 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();

                }

            }

        }
  •  
  • 33

C# ManualResetEvent 类的用法

原理就说完了我们来看一下程序运行的结果! 
C# ManualResetEvent 类的用法

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