主线程执行

线程1加入线程池
线程2加入线程池
线程3加入线程池
线程4加入线程池...主线程等待线程池中加入的线程运行完毕主线程执行

怎么实现上面的步骤?如果线程池只加入一个,那么在线程运行结束调用manulresetevent类的set()方法即可,但是加入一个以上该怎么办呢?

解决方案 »

  1.   

    首先将 static void Main()
            {
            }
    前面的[STAThread]改为[STAThread]下面这个类是具体的实现方法, 主线程可以调用该类的 transAll()
    方法,来实现多线程池完成共同逻辑处理,所有线程池执行完毕,返回主线程。
    主要过程是由AutoResetEvent和WaitHandle.WaitAll(autoEvents)来实现
    public class mulThread
        {
            #region 成员变量     
            private int count = 10;    //线程池个数
            private AutoResetEvent[] autoEvents;
            private ManualResetEvent manualEvent;     
            #endregion        #region 构造函数
            public mulThread()
            {
                autoEvents = new AutoResetEvent[10];
                for (int i = 0; i < count; i++)
                {
                    AutoResetEvent aRe = new AutoResetEvent(false);
                    autoEvents[i] = aRe;
                }           
            }
            #endregion        #region 
            private void testInsert(object stateInfo)
            {
                int n = (int)stateInfo;  //n为线程池编号
                //这里添加业务处理过程
                  ...
                ...           
                autoEvents[n].Set();
            }
            #endregion        #region 
            public string transAll()
            {
                for (int n = 0; n < count; n++)   //添加10个线程,执行同一方法
                {
                    ThreadPool.QueueUserWorkItem(
                       new WaitCallback(testInsert),n);
                }
                WaitHandle.WaitAll(autoEvents);  //等待所有线程池执行完成
                return "完成";
            }
            #endregion
        }