2010-06-18 7 views

Respuesta

1

Esa no es la forma en que funciona. Cualquier subproceso en un programa administrado puede ejecutar código administrado, incluidos los que originalmente se iniciaron como un subproceso no administrado. La mayoría de ellas son, el hilo principal y cualquier hilo de subprocesos inicia vida ejecutando código puramente no administrado. Se transforma en código administrado a través del tipo de puerta de enlace proporcionada por Marshal.GetDelegateForFunctionPointer().

Ver docenas de hilos (de lo contrario inactivos) no es inusual. Por lo general, son subprocesos threadpool y subprocesos iniciados por servidores COM. A .NET le falta la fontanería que necesitaría para utilizar Thread.ManagedThreadId en esos hilos. Eso es intencional, un hilo .NET lógico no tiene que ser un hilo del sistema operativo físico. Aunque no hay un host en uso actual donde ese no es el caso.

Deberá evitar tener que formular la pregunta.

+0

gracias por dejarme saber. sin embargo, me gustaría tener una respuesta. ¿Cómo puedo saber cuántos hilos gestionados se crean en mis aplicaciones en cualquier momento? –

+0

Los creas, cuéntalos. –

+0

ese es el punto! Uso 3d party API y no quieren revelar detalles, también podría usar un grupo de subprocesos u otro software, etc. –

1

No he comprobado si es posible utilizar las interfaces de depuración, pero como VS muestra los subprocesos administrados en su depurador, también debería poder obtenerlos en el suyo.

En .NET, escribir un depurador es mucho más fácil de lo que cabría esperar. La implementación del depurador básicamente consiste en implementar la interfaz ICorDebug.

Hay una muestra de Microsoft: Managed Debugger Sample