主线程执行
线程1加入线程池
线程2加入线程池
线程3加入线程池
线程4加入线程池...主线程等待线程池中加入的线程运行完毕主线程执行
。
怎么实现上面的步骤?如果线程池只加入一个,那么在线程运行结束调用manulresetevent类的set()方法即可,但是加入一个以上该怎么办呢?
线程1加入线程池
线程2加入线程池
线程3加入线程池
线程4加入线程池...主线程等待线程池中加入的线程运行完毕主线程执行
。
怎么实现上面的步骤?如果线程池只加入一个,那么在线程运行结束调用manulresetevent类的set()方法即可,但是加入一个以上该怎么办呢?
{
}
前面的[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
}