如何判断线程是否结束呀?
假如有下面的代码:   
 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; 
 }
------解决方案--------------------提个思路,将每个线程放到数组等变量中,这样循环一下取状态就可以了 
 如果线还要有区别,那就放到类似哈希表中,起个名就行
------解决方案--------------------