今天看到一个net2.0的线程等待与通知的代码, 感觉有些意思, 记录一下

 

private AutoResetEvent[] _endReport;
        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(
                () =>
                {
                    while (true)
                    {
                        _endReport = new AutoResetEvent[1] { new AutoResetEvent(false) };

                        bool bolWaitTimeOut = false;

                        //监听这个线程是否有返回结果
                        bolWaitTimeOut = !WaitHandle.WaitAll(_endReport, 10 * 1000, false);
                        if (bolWaitTimeOut)
                        {
                            _endReport[0].Set();
                            this.txtLog.Text += "Button execute is timeout! Current command" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "\n";
                        }

                        this.txtLog.Text += "开始监测动作了" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "\n";
                    }
                }
              );
            thread.Start();            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(
                () =>
                {
                    //假设返回了结果,用下面这句来通知等待WaitHandle.WaitAll
                    _endReport[0].Set();
                }
              );

            thread.Start();
        }

 

posted on 2022-04-25 14:15  风浪  阅读(199)  评论(0编辑  收藏  举报