2010-06-18 44 views

回答

1

这不是它的工作方式。托管程序中的任何线程都可以执行托管代码,包括最初作为非托管线程启动的代码。其中最主要的是,主线程和任何线程池线程开始执行纯粹的非托管代码。它通过Marshal.GetDelegateForFunctionPointer()提供的网关进入托管代码。

看到数十个(否则无效)线程并不罕见。它们通常是由COM服务器启动的线程池线程和线程。 .NET缺少在这些线程上使用Thread.ManagedThreadId所需的管道。这是故意的,逻辑.NET线程不一定是物理操作系统线程。虽然目前情况并非如此,但目前没有主机在使用。

您将不得不避免提问。

+0

谢谢你让我知道。不过,我想要一个答案。如何找出在我的应用程序中随时创建多少托管线程? – 2010-06-18 23:50:38

+0

你创造它们,数它们。 – 2010-06-19 00:45:38

+0

这就是要点!我使用3D派对API,他们不想透露细节,也可能使用线程池或其他软件等。 – 2010-06-22 14:33:22

1

我没有检查是否可以使用调试接口,但由于VS在其调试器中显示托管线程,因此您应该能够将它们放入您的调试器中。

在.NET中,编写调试器比您期望的要容易得多。实现调试器基本上包括实现ICorDebug接口。

有来自微软的样本:Managed Debugger Sample

相关问题