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

如何判断线程是否结束呀?
假如有下面的代码:

private   void   runThread()
{
        if   (i==1)
        {
              ThreadStart   threadDelegate   =   new   ThreadStart(fun1);
              Thread   thread   =   new   Thread(threadDelegate);
              thread.Start();
          }

        if   (i==2)                                        
        {
              ThreadStart   threadDelegate   =   new   ThreadStart(fun2);
              Thread   thread   =   new   Thread(threadDelegate);
              thread.Start();
        }
}

private   void   fun1()
{
        //do   something...
}

private   void   fun2()
{
        //do   something...
}

然后程序里有一个ListBox1,我用它来记录线程的运行状态

假如用button1来触发事件的话
private   void   btnStart_Click(object   sender,   EventArgs   e)
{
        listBox1.Items.Add(DateTime.Now.ToString()+ "     线程开始.. ");
        runThread();
        ....
        //接下来如何判断 "线程结束 "??我希望能得到每一个线程结束的消息
        //在我的listBox1里显示:
        //   2007-4-3   17:00:01   线程开始
        //   2007-4-3   17:00:12   线程1已结束
        //   2007-4-3   17:00:28   线程2已结束
        //   2007-4-3   17:00:52   所有线程已结束
}

请哪位大侠按照上面的思路给我个示例代码,小弟感激不尽。。

------解决方案--------------------
if(thread.State == ThreadState.Stopped)
{

}
------解决方案--------------------
用delegate
private void fun1()
{
//do something...
threadend1();
}
private void fun2()
{
//do something...
threadend1();
}
private void threadend1()
{
线程1已结束
}
------解决方案--------------------
IsActive属性.

其实我觉得不应该通过属性或者方法来事后判断,而应该当这个线程完成之后,就应该处理,要不立即销毁,要不建立一个等待集合,加这个线程加进去,等待继续使用,这种常用于需频烦使用线程的应用场景,比如ADO.NET数据库连接池.
------解决方案--------------------
学习+顶
回楼上:
有时候要知道是否这个线程在运行,如果在运行则不用启动另一个线程,反之则要启动,所以必需要进行判断,我也想知道一个更好的答案
------解决方案--------------------
用一个类变量来让线程自己修改表示结束吧。
private bool isOver1 = false;
private bool isOver2 = false;

private void fun1()
{
// do something...
isOver1 = true;
}

private void fun2()
{
// do something...
isOver2 = true;
}
------解决方案--------------------
提个思路,将每个线程放到数组等变量中,这样循环一下取状态就可以了
如果线还要有区别,那就放到类似哈希表中,起个名就行
------解决方案--------------------