怎么等待线程池中所有线程都运行结束在运行主线程?

ldxab 2010-03-01 04:27:49
主线程执行
。。。
线程1加入线程池
线程2加入线程池
线程3加入线程池
线程4加入线程池...

主线程等待线程池中加入的线程运行完毕。。。

主线程执行
。。。。


怎么实现上面的步骤?如果线程池只加入一个,那么在线程运行结束调用manulresetevent类的set()方法即可,但是加入一个以上该怎么办呢?
...全文
408 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppyyhh 2010-03-03
  • 打赏
  • 举报
回复
首先将 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
}
ldxab 2010-03-02
  • 打赏
  • 举报
回复
帮帮我啊,怎么没人回复?
ldxab 2010-03-01
  • 打赏
  • 举报
回复
怎么没人回复?有高手知道么?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧