• AutoResetEvent.WaitAll 等到人生三大事,然后大笑开心。


    例子描述:人生都有追求幸福理想,下面就用三条线程得到房子,车子,妻子,等待全部得到后,显示人生圆满。

    View Code
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
        static class Program
        {
            /// <summary>
            
    /// 应用程序的主入口点。
            
    /// </summary>
            [MTAThread] //不支持一个 STA 线程上针对多个句柄的 WaitAll。解决办法把STAThread改成MTAThread
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;

    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

     

            private void button1_Click(object sender, EventArgs e)
            {
                //定义一个人对象
                Person person = new Person();

                //这个人去干三件大事
                Thread GetCarThread = new Thread(new ThreadStart(person.GetCar));
                GetCarThread.Start();

                Thread GetHouseThead = new Thread(new ThreadStart(person.GetHouse));
                GetHouseThead.Start();

                Thread GetWillThead = new Thread(new ThreadStart(person.GetWife));
                GetWillThead.Start();

                //等待三件事都干成的喜讯通知信息
                AutoResetEvent.WaitAll(person.autoEvents);

                //这个人就开心了。
                person.ShowHappy();
            }

         }

        public class Person
        {
            //建立事件数组
            public AutoResetEvent[] autoEvents = null;

            public Person()
            {
                autoEvents = new AutoResetEvent[]
                {
                    new AutoResetEvent(false),
                    new AutoResetEvent(false),
                    new AutoResetEvent(false)
                };
            }


            public void GetCar()
            {
                MessageBox.Show("捡到奔驰");
                autoEvents[0].Set();
            }

            public void GetHouse()
            {
                MessageBox.Show("赚到房子");
                autoEvents[1].Set();
            }

            public void GetWife()
            {
                MessageBox.Show("骗到老婆");
                autoEvents[2].Set();
            }


            public void ShowHappy()
            {
                MessageBox.Show("人生要有的都有了,好开心");
            }
        }
    }

     注意:

    AutoResetEvent.WaitAll();//AutoResetEvent继承WaitHandle 等同于:WaitHandle.WaitAll();

    WaitHandles 的数目必须少于或等于 64 个。

  • 相关阅读:
    Hbase 统计行数的四种方式
    Solr、MongoDB和Hadoop比较
    三种方法更改MAC OS X下的HOSTS文件
    史上最全前端面试题(含答案)
    图文-水平垂直居中兼容ie6+
    CSS3动画
    jQuery延迟加载(懒加载)插件 – jquery.lazyload.js-Web前端(W3Cways.com)
    web app变革之rem
    MAC中通过gem命令安装compass
    mac下升级ruby环境版本
  • 原文地址:https://www.cnblogs.com/51net/p/3012283.html
Copyright © 2020-2023  润新知