2009-12-29 3 views
3

J'essaye de résoudre un plus grand problème de multi-traitement - je suspecte qu'une bibliothèque de client crée un fil de premier plan, et j'essaye de voir si cette théorie est correcte. Pour ce faire, je voudrais pouvoir enregistrer une liste de tous les threads dans un processus, leur état et s'ils sont en arrière-plan ou en avant-plan.Comment puis-je obtenir une liste de tous les threads dans une application .Net?

J'ai vu Process.GetCurrentProcess(). Threads, mais cela retourne un objet ProcessThread, pas un System.Thread. ProcessThread n'a pas toutes les propriétés qu'un System.Thread fait.

Existe-t-il un moyen d'obtenir la liste de System.Threads?

+0

BTW, fils retournés par Process.Threads sont des fils OS, ne sont pas gérés fils –

Répondre

3

Comment l'utilisation Sysinternal's ProcMon

Comme @jvilalta a souligné, Process Explorer est également une bonne option.

+1

Ou leur Process Explorer ... Ou – jvilalta

+1

Process Hacker http://processhacker.sourceforge.net – KingRadical

+1

Notez que ce n'est pas garanti qu'il y aura une thread distinct du système d'exploitation (qui est ce que procmon et procexp montrent) pour chaque thread CLR: voir http://stackoverflow.com/questions/466632/how-can-i-get-managed-threads-from-process-getcurrentprocess-threads. Ainsi procmon peut manquer des threads gérés. Notez également que les threads du système d'exploitation n'auront pas d'informations sur les threads gérés tels que name et foreground/background: ce que procmon/procexp show est équivalent à ProcessThread, ce que Jeremy dit avoir déjà considéré et rejeté. – itowlson

2

Visual Studio a nativement la possibilité d'afficher tous les threads actifs, ou vous pouvez utiliser DebugInspector (pas sûr de l'URL, désolé).

À partir de C#, je ne sais pas comment cela peut être fait.

Questions connexes