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