20150924

来源:互联网 发布:淘宝店铺装修数据包 编辑:程序博客网 时间:2024/05/01 11:49

//ThreadPool.QueueUserWorkItem线程池,解决了相应问题。例子中先点击button1,button2,会先响应button2addtest会再后台运行

        public Form1()

        {

           InitializeComponent();

        }

 

        private voidbutton1_Click(object sender,EventArgs e)

        {

            ThreadPool.QueueUserWorkItem(newWaitCallback(addtest),"Testaa");

        }

 

        private void addtest(object aa)

        {

            long result = 0;

            for (int i = 0; i< 1000000000; i++)

            {

               result += i;

            }

            MessageBox.Show(result.ToString() +aa.ToString());

 

        }

 

        private voidbutton2_Click(object sender,EventArgs e)

        {

            MessageBox.Show("two");

 

        }

 

    }

 

 

ManualResetEvent

当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态。此线程可被视为控制 ManualResetEvent。调用ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。

一旦它被终止,ManualResetEvent 将保持终止状态,直到它被手动重置。即对 WaitOne 的调用将立即返回。

static ManualResetEvent _mre = new ManualResetEvent(false);

       static void Main(string[] args)

       {

           Thread[]_threads = new Thread[3];

           for (int i = 0; i <_threads.Count(); i++)

           {

               _threads[i]= new Thread(ThreadRun);

               _threads[i].Start();

           }

           

       }

 

       static void ThreadRun()

       {

           int _threadID = 0;

           while (true)

           {

               _mre.WaitOne();

               _threadID= Thread.CurrentThread.ManagedThreadId;

               Console.WriteLine("currentTread is " + _threadID);

               Thread.Sleep(TimeSpan.FromSeconds(2));

                  

           }

 

当初始化为true时,为终止状态

static ManualResetEvent _mre = new ManualResetEvent(true);

执行结果

 

当初始化为false时,为非终止状态

static ManualResetEvent _mre = new ManualResetEvent(false);

执行结果为

 

 

把非终止状态改为终止状态用Set()方法

把终止状态改为非终止状态用Reset()方法

  /*1this.manualEvent.Reset(); //将事件状态设置为非终止状态,导致线程阻止。

 

           2this.manualEvent.Set();   //将事件状态设置为终止状态,允许一个或多个等待线程继续。*/

我用用代码来实现它们只要把我们上 边的代码做一下改动

class Program

    {

        static ManualResetEvent _mre = new ManualResetEvent(false);

        static void Main(string[] args)

        {

            Console.WriteLine("输入1为Set()   开始运行");

            Console.WriteLine("输入2为Reset() 暂停运行");

            Thread[] _threads = new Thread[3];

            for (int i = 0; i < _threads.Count(); i++)

            {

                _threads[i] = new Thread(ThreadRun);

                _threads[i].Start();

            }

            while (true)

            {

                switch (Console.ReadLine())

                {

                    case "1":

                        _mre.Set();

                        Console.WriteLine("开始运行");

                        break;

                    case "2":

                        _mre.Reset();

                        Console.WriteLine("暂停运行");

                        break;

                    default:

                        break;

                }

            }

            

        }

 

        static void ThreadRun()

        {

            int _threadID = 0;

            while (true)

            {

                 

                _threadID = Thread.CurrentThread.ManagedThreadId;

                Console.WriteLine("current Tread is " + _threadID);

                Thread.Sleep(TimeSpan.FromSeconds(2));

                _mre.WaitOne();

            }

        }

    }

 

 

当输入1 时会调用 Set()方法 ManualResetEvent 处于终止状态会WaitOne不会阻塞线程会一直运行下去

当输入2时会调用 Reser()方法ManualResetEvent处于非终止状态WaitOne会阻塞线程直到再调用 Set()方法

看一下执行结果吧

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 联通流量不到账怎么办 卖家拒绝退款怎么办? 淘宝退款后红包怎么办 手机不能吃鸡怎么办? 在国外手机软件好多不支持怎么办 淘宝店拒绝退款怎么办 app没有退款资格怎么办 手机无法计步怎么办 抖音机型不支持怎么办 用nfc不支持卡片怎么办 移动怎么办省内流量包 手机交不了话费怎么办 淘宝快递不签收怎么办 快递买家不签收怎么办 淘宝退货未收货怎么办 淘宝退衣服运费怎么办 手机流量不到账怎么办 淘宝水果坏了怎么办 用微信充值话费充成空号了怎么办 苹果id被拉黑了怎么办 苹果app不退款怎么办 合同退款不退怎么办 微信充值q币被骗怎么办 小米手机存储空间不够怎么办 小米mix2s存储空间不够怎么办 进货一直没发票怎么办 魅蓝note5卡怎么办 电话费套餐花不了怎么办 墙和床头有间缝怎么办 床板里有虫子怎么办 松木床板味道大怎么办 寝室床板有虫子怎么办 胶合板当床板有气味怎么办 淘宝食品有问题怎么办 淘宝买东西碎了怎么办 被淘宝商家骚扰怎么办 闲鱼被别人拉黑怎么办 三无工厂抓到怎么办 淘宝买东西卖家不发货怎么办 打假人异地起诉怎么办 卖家拒绝发货怎么办