多线程进度条的问题,头疼死了,以下是源代码,哪位高人给看看啥问题
        private void button1_Click(object sender, EventArgs e)
        {            info _info=new info();
            
            _info.total=20;
            ManualResetEvent[] _ManualEvents = new ManualResetEvent[_info.total];
            for (int i = 0; i < _info.total; i++)
            {
                _ManualEvents[i] = new ManualResetEvent(false);
                _info.current = i;
                _info.MRevent = _ManualEvents[i];
                ThreadPool.QueueUserWorkItem(new WaitCallback(dosomething), _info);
            }
            WaitHandle.WaitAll(_ManualEvents);//有这句程序就死掉了,没有的话进度条正常************************
        }        public struct info
        {
            public int total;
            public int current;
            public ManualResetEvent MRevent;
        }
        private void ShowProgress(int nTotal, int nCurrent)
        {
            if (this.InvokeRequired)
            {
                ShowProgressDelegate oShowProgress = new ShowProgressDelegate(ShowProgress);
                this.Invoke(oShowProgress, new object[] { nTotal, nCurrent });
            }
            else
            {
                this.progressBar1.Maximum = nTotal;
                this.progressBar1.Value = nCurrent;
            }
        }        public void dosomething(object o)
        {
            info _info = (info)o;
            Thread.Sleep(100);
            _info.current++; 
            ShowProgress(_info.total, _info.current);
            ManualResetEvent e = _info.MRevent;
            e.Set();
        }多线程进度条ThreadPoolWaitHandle.WaitAll