可以在.NET中确定前台线程的数量吗?

时间:2011-03-08 16:40:21

标签: c# .net vb.net

我在这个主题上搜索了很多,并且发现了很少的结果。似乎在我使用的任何引擎的标准中添加了前景,在.Net中引入大量的入门级文档。

在我当前的项目中,我在一个静态类中有一个前景线程,它处于休眠状态,直到被告知为止。它包含必须处理的项目队列,如果没有处理所有项目,则项目应用程序无法关闭。现在我有一个方法告诉线程它应该停止接受新项目并在完成处理所有内容时关闭,但团队中的每个人都不会记得调用该方法。在进程仍然在后台运行时关闭GUI是我认为的一个错误。如果我可以添加定期检查以查看排队的线程是否是最后一个前台线程,那么我可以调用该方法而不必担心使用该类的其他人。

2 个答案:

答案 0 :(得分:4)

您无法迭代正在运行的线程。这可以防止你发现是否有IsBackground = false。这是相当基础的,迭代线程永远不会产生准确的结果。线程是动态创建和终止的,您不能“冻结”您的过程以确保结果准确。

您需要将此视为一个错误。忽略显式终止请求的线程代码存在缺陷。明智地说明这一点,而不是希望程序员能够做到这一点。通过使用BackgroundWorker类及其CancellationPending属性。或者.NET 4.0 Task类及其CancellationToken结构。程序员不能声称对这些功能一无所知。请小心在你的UI代码中正确使用它,死锁非常

答案 1 :(得分:0)

看看System.Diagnostics.Process.Threads。这将为您提供当前进程中所有线程的集合。也许你可以用它做点什么。也许它就像检查你的是过程中唯一的线程一样简单吗?