怎样判断线程是否结束?--在线等待
比如:我开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好些。