读书人

怎么判断线程是否结束呀

发布时间: 2011-12-20 22:26:40 作者: rapoo

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

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;
}
[解决办法]
提个思路,将每个线程放到数组等变量中,这样循环一下取状态就可以了
如果线还要有区别,那就放到类似哈希表中,起个名就行
------解决方案--------------------


顶fangxinggood(JustACoder):
我编程经常遇到这种情况,你可以设置一个全局变量啊,在线程结束的时候修改这个标志变量即可。 主线程通过这个变量判断就行了。
[解决办法]
线程好像有IsActive属性的

读书人网 >C#

热点推荐