Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 能否在.NET中确定前台线程的数量?_C#_.net_Vb.net - Fatal编程技术网

C# 能否在.NET中确定前台线程的数量?

C# 能否在.NET中确定前台线程的数量?,c#,.net,vb.net,C#,.net,Vb.net,我在这个话题上搜索了很多,但没有找到什么结果。似乎将前台添加到我使用过的任何引擎的标准中都会导致.Net线程中出现大量入门级文档 在我当前的项目中,我在一个静态类中有一个前台线程,它处于休眠状态,直到被告知其他情况。它包含必须处理的项目队列,如果未处理所有项目,则项目应用程序无法关闭。现在,我有一个方法告诉线程,它应该停止接受新项目,并在处理完所有事情后关闭,但团队中并不是每个人都记得调用该方法。在我看来,在进程仍在后台运行时关闭GUI是一个相当大的错误。如果我可以添加一个定期检查来查看排队的线

我在这个话题上搜索了很多,但没有找到什么结果。似乎将前台添加到我使用过的任何引擎的标准中都会导致.Net线程中出现大量入门级文档


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

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

您无法迭代正在运行的线程。这会使您无法确定是否有IsBackground=false。这是非常基本的,迭代线程永远不会产生准确的结果。线程是动态创建和终止的,您不能“冻结”进程以确保结果准确


您需要简单地将其视为一个bug。忽略显式终止请求的线程代码存在缺陷。明智的做法是将这一点明确化,而不是希望程序员正确地理解。通过使用BackgroundWorker类及其CancellationPending属性。或.NET 4.0任务类及其CancellationToken结构。程序员不能声称对这些特性一无所知。顺便说一句,在您的UI代码中要注意这一点,死锁很可能发生。

干净、快速地关闭应用程序是一项非常重要的功能。如果你是团队中唯一一个认为“在进程仍然关闭的时候没有GUI显示”的人,你应该考虑让团队对预期的应用程序的行为达成一致。你不能将ProcessThread映射到Thread对象。我必须同意这一点。关闭时无法释放资源的程序就是有缺陷的。