日期:2014-05-19  浏览次数:21235 次

怎样判断线程是否结束?--在线等待
比如:我开10个线程,怎样判断这10个线程已经都全部结束?

------解决方案--------------------
bool flag=false;
List <Thread> array=new List <Thread> ();
//添加Threads
for(int i=0;i <array.Length;i++)
{
if(array[i]!=null)
{
flag=true;//没有结束
Break;
}
}

if(flag==false)
{
//全部结束
}
else
{
//未结束
}

------解决方案--------------------
1 全局变量
设置变量值
循环检查

2
System.Threading.ManualResetEvent e = new System.Threading.ManualResetEvent(false);
然后把这个e传进线程的方法中,在里面调用e.Set()表示线程结束

在线程外用
e.WaitOne或者System.Threading.WaitHandle.WaitAll等待
------解决方案--------------------
上面代码没验证,小心
------解决方案--------------------
http://blog.csdn.net/siyou/archive/2006/12/22/1453047.aspx

用这个吧,前面加一个FOR就可以了
------解决方案--------------------
附加一句,一般判断线程都是这样子的

1、把线程的内容用类来封装,然后用xx.yy启动线程
2、在类的开头有一启动public变量,例如:treadalive=true,到结束的时候,treadalive=false
3、在主线程用xx.yy.变量来判断线程是否结束
------解决方案--------------------
有很多办法啊,最常见的就是设置标志,比如

SortedList <string,bool> tListTag;

开跑的时候设定一个名字Thread.Name,然后在结束的时候,用

lock (tListTag)
{
tListTag[Thread.CurrentThread.Name] = false;
}
只要是false的,都是已经跑完的
------解决方案--------------------
线程.IsAlive
------解决方案--------------------
回调函数
------解决方案--------------------
计数么

开始一个线程就+1

结束一个线程就-1

MS很多东西都是这么干的
------解决方案--------------------
等待信号量System.Threading.WaitHandle.WaitAll好些。