c# - 检测何时创建新的托管线程

标签 c# .net

有谁知道是否可以检测托管环境中何时创建了新线程?

我想要一个应用程序中所有线程的列表(每个线程的 ID 和名称)。我在 Visual Studio 中使用并发可视化工具,它仅显示线程 ID(而不是线程名称)。如果您有 20 多个没有名称的线程,则很难可视化程序流程。

编辑: 使用 Process.GetCurrentProcess()。线程不行,因为 CLR 不保证托管线程和非托管线程之间的一对一映射。

一种解决方案是创建某种线程管理器,所有线程创建都必须通过它来完成。它还将管理所有当前事件线程的列表。

最佳答案

答案是否定的,您不能 - 您甚至无法枚举所有当前的“托管”线程,更不用说在创建/销毁线程时收到通知了。

参见How can I enumerate all managed threads in C#?

注意:您可以使用 Process 类枚举进程中的所有线程:

Process.GetCurrentProcess().Threads

但是,这不会告诉您其中哪一个是“托管”的,并且不会在创建或销毁线程时通知您。

您可能可以尝试通过查看托管线程的堆栈跟踪来找出其中哪些线程是“托管”的,但老实说,我不知道这是否真的适用于非托管线程,而且这一切都开始看起来很真实躲闪!

new StackTrace().GetFrame(someThread)

只是为了澄清 - 你几乎肯定不应该做任何这些,这只是一些背景。

关于c# - 检测何时创建新的托管线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761696/

相关文章:

c# - 如果我使用 AllocHGlobal 分配一些内存,我是否必须使用 FreeHGlobal 释放它?

c# - 尝试上传具有 Angular 2 的文档时,Web API 中的文件计数始终为零

c# - 为什么 System.Random 类不是静态的?

c# - 如何将每个句子的首字母大写?

c# - Dapper 结果到 json(使用 fastjson)

c# - 在每个测试方法运行之前或之后自动执行方法/代码

c# - 不可变变量和不可变对象(immutable对象)

C#:在文本框的 keydown 事件中,如何检测当前按下的修饰符 + 键?

c# - 以下方法或属性 C# 之间的调用不明确

.net - 如何使用 EPPlus 在单个 Excel 单元格中加载包含逗号的文本