首页 新闻 搜索 专区 学院

C#多线程:所有的线程执行完毕之后,需要 做一个处理,但是如何知道所有线程执行完毕了呢?

0
[已解决问题] 解决于 2012-01-03 10:49

我自己想用 ArrayList 把 每个 进程都装起来 ,

然后 在每个进程里面 进行 for 循环  判断 ArrayList 里面的 进程状态

可是这样 无法使用Response 了,而且 程序 也变得 乱七八糟

fun5的主页 fun5 | 初学一级 | 园豆:4
提问于:2011-11-09 13:45
< >
分享
最佳答案
1

你可以用WaitHandle确保所有线程都执行完毕。示例代码:

 AutoResetEvent[] watchers = new AutoResetEvent[10];
for (int i = 0; i < 10; i++)
{
var j = i;
watchers[j] = new AutoResetEvent(false);

//启动10个线程输出10个数字
new Thread(() =>
{
Console.WriteLine(j);
watchers[j].Set(); //线程执行完的时候通知
}).Start();
}

WaitHandle.WaitAll(watchers); //确保所有线程都执行完毕
水牛刀刀 | 大侠五级 |园豆:6350 | 2011-11-09 15:07

什么必须的带上

var j = i;
没有这句的话,i=10,会超出数据边界。
这是为什么呢
mrhyher | 园豆:5 (初学一级) | 2013-05-24 16:36
其他回答(4)
0

到底是线程还是进程啊,不清楚先自己查查资料啊

ChatinCode | 园豆:2272 (老鸟四级) | 2011-11-09 15:07
0

Response 好像只能在一个线程中使用,可能你要将要输出的东西放在一个地方,再使用主线程的Response

小小刀 | 园豆:1991 (小虾三级) | 2011-11-09 21:47
0

可以使用Task,当所有Task执行完毕后再执行你需要的操作

参考msdn

http://msdn.microsoft.com/en-us/library/dd321473.aspx

klice | 园豆:173 (初学一级) | 2011-12-31 17:19
0

额,要用到线程池

fun5 | 园豆:4 (初学一级) | 2012-01-03 10:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册