2010-06-18 6 views

Répondre

1

Ce n'est pas la façon dont il fonctionne. Tout thread dans un programme géré peut exécuter du code managé, y compris ceux qui ont été initialement démarrés en tant que thread non géré. Les plus courants sont le thread principal et tout thread threadpool qui commence la vie en exécutant du code purement non géré. Il thunks dans le code managé si le type de passerelle fournie par Marshal.GetDelegateForFunctionPointer().

Voir des dizaines de threads (inactifs) n'est pas inhabituel. Ils sont généralement des threads threadpool et des threads démarrés par les serveurs COM. .NET manque la plomberie dont vous avez besoin pour utiliser Thread.ManagedThreadId sur ces threads. Cela est intentionnel, un thread .NET logique ne doit pas être un thread de système d'exploitation physique. Bien qu'il n'y ait aucun hôte dans l'utilisation courante où ce n'est pas le cas.

Vous devrez éviter de devoir poser la question.

+0

merci pour me le faire savoir. Cependant, j'aimerais avoir une réponse. Comment savoir combien de threads gérés sont créés dans mes applications à tout moment? –

+0

Vous les créez, comptez les. –

+0

c'est le but! J'utilise 3D Party API et ils ne veulent pas divulguer les détails, il pourrait aussi utiliser pool de threads ou un autre logiciel etc .... –

1

Je n'ai pas vérifié s'il est possible d'utiliser les interfaces de débogage mais puisque VS affiche les threads gérés dans son débogueur, vous devriez aussi pouvoir les obtenir dans les vôtres.

En .NET, écrire un débogueur est beaucoup plus facile que vous pouvez vous attendre. L'implémentation du débogueur consiste essentiellement à implémenter l'interface ICorDebug.

Il est un exemple de Microsoft: Managed Debugger Sample

Questions connexes