如果主线程完成,我需要清理每个正在运行的线程。在启动之后,我立即将正在运行的线程放入List<Thread>
集合中。 我的“车轮”的方法是:是否有任何方便的方法来定期检查线程状态?
static void CheckThreadIsAliveJob(object thread)
{
while (((Thread)thread).IsAlive)
{
Thread.Sleep(1000);
}
// DO staff
}
我觉得我的做法是对的线程大量非常昂贵的,因为我需要与CheckThreadIsAliveJob
身体开始新的线程为每个人。
任何想法?
我rewrited上面的代码,但是这看起来还是AGLY:
static void RemoveFinishedThreadsJob(object threadList)
{
foreach (var thread in (IList<Thread>)threadList)
{
if (!thread.IsAlive)
lock (threadList)
{
((IList<Thread>) threadList).Remove(thread);
}
}
Thread.Sleep(1000);
}
我实现了IDisposable接口的Dispose方法在我的课:
public void Dispose()
{
foreach (var thread in _runningThreads)
{
if (thread.IsAlive)
thread.Abort();
if (_removeFinishedThreads.IsAlive)
_removeFinishedThreads.Abort();
}
}
现在,当应用程序被关闭和GC正在收集垃圾,所有正在运行的线程都将手动中止。
您正在重新实现Thread.IsBackground属性。只需将其设置为* true *。 – 2015-03-13 11:18:06