2010-06-18 60 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

相關問題