zoukankan      html  css  js  c++  java
  • 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 个。

  • 相关阅读:
    HTML简介
    web服务器的原理
    静态网页和动态网页的区别
    HTTP协议相关原理
    C/S,B/S的应用的区别
    git撤销commit但未push的文件
    表单提交不刷新页面
    httpclient请求中文乱码问题
    web项目,@return@see@param等注解Maven install报错,不能识别
    Hive 基本操作
  • 原文地址:https://www.cnblogs.com/51net/p/3012283.html
Copyright © 2011-2022 走看看