AutoResetEvent和ManualResetEvent用法

概述:AutoResetEvent和ManualResetEvent从字面意思来讲第一个表示的是自动重置,第二个表示手动重置,它们两都有三个方法Reset(),Set(),WaitOne()。在创建对象的时候有一个bool参数,true表示创建有信号的对象,false表示创建无信号的对象。下面来看一段代码:

 

public partial class Form1 : Form

    {

        AutoResetEvent autoResetEvent = null;

        ManualResetEvent manualResetEvent = null;

        public Form1()

        {

            Form.CheckForIllegalCrossThreadCalls = false;

 

            InitializeComponent();

            //创建对象初始化为没有信号

            this.autoResetEvent = new AutoResetEvent(false);

            //this.manualResetEvent = new ManualResetEvent(false);

            ////创建对象初始化为有信号

            //this.autoResetEvent = new AutoResetEvent(true);

            //this.manualResetEvent = new ManualResetEvent(true);

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            //创建一线程

            Thread thread = new Thread(new ThreadStart(Method));

            thread.Start();

        }

        //定义一个线程调用的方法

        private void Method()

        {

            for (int i = 1; i <= 100;i++ )

            {

                this.label1.Text = i + "";

                //将线程堵塞,等待信号

                //this.manualResetEvent.WaitOne();

                this.autoResetEvent.WaitOne();

                Thread.Sleep(1000);

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            this.autoResetEvent.Set();

            //this.manualResetEvent.Set();

        }

 

按照这个代码直接执行的话,我们会发现label变为1后就不变了,这是我们如果每点击一次button1那么label就变加1。说明我们没调用一次set方法后,都会自动重置,将信号关闭;如果我们将创建AutoResetEvent的参数改为true,那么说明我们在创建它的时候就给了一次信号,我运行这个程序会发现label变化两次,也就是先变为1再变为2; 如果我们将autoResetEvent注释了,将this.manualResetEvent = new ManualResetEvent(false);注释给取消,当然后面的相应的调用都需要改为manualResetEvent的的调用,这时我们来执行的时候,当程序起来后,label1变为了1,当我们点击button1的时候,label1就不停的加1,说明ManualResetEvent没有自动重置,这就是它们两最大的区别;当然如果我们还是把创建ManualResetEvent对象是的参数修改为true的话,大家想想运行会出现什么个情况呢?如果运行的话lable1就直接不停的加1。

转载于:https://www.cnblogs.com/zhangchenliang/archive/2012/08/23/2653219.html

Guess you like

Origin blog.csdn.net/weixin_34088838/article/details/93495207