2010-06-18 5 views

Antwort

1

Das ist nicht die Art, wie es funktioniert. Jeder Thread in einem verwalteten Programm kann verwalteten Code ausführen, einschließlich solcher, die ursprünglich als nicht verwalteter Thread gestartet wurden. Was am meisten ist, der Hauptthread und jeder threadpool thread beginnt mit der Ausführung von rein nicht verwaltetem Code. Es tappt in verwalteten Code über die Art von Gateway, die von Marshal.GetDelegateForFunctionPointer() bereitgestellt wird.

Dutzende von (sonst nicht aktiven) Threads zu sehen ist nicht ungewöhnlich. In der Regel handelt es sich um Threadpool-Threads und Threads, die von COM-Servern gestartet werden. .NET fehlt die Installation, die Sie Thread.ManagedThreadId für diese Threads verwenden müssen. Das ist beabsichtigt, ein logischer .NET-Thread muss kein physischer Betriebssystem-Thread sein. Obwohl es momentan keinen Host gibt, wo das nicht der Fall ist.

Sie müssen vermeiden, die Frage stellen zu müssen.

+0

Danke, dass ich weiß. Aber ich hätte gerne eine Antwort. Wie finde ich heraus, wie viele verwaltete Threads in meinen Anwendungen zu jeder Zeit erstellt werden? –

+0

Sie erstellen sie, zählen sie. –

+0

das ist der Punkt! Ich benutze 3D-Party-API und sie wollen nicht Details zu offenbaren, auch könnte es Thread-Pool oder eine andere Software usw. verwenden .... –

1

Ich habe nicht überprüft, ob es möglich ist, die Debugging-Schnittstellen zu verwenden, aber da VS verwaltete Threads in seinem Debugger anzeigt, sollten Sie in der Lage sein, sie auch in Ihrem zu bekommen.

In .NET ist das Schreiben eines Debuggers viel einfacher als erwartet. Die Implementierung des Debuggers besteht im Wesentlichen darin, die Schnittstelle ICorDebug zu implementieren.

Es ist ein Beispiel von Microsoft: Managed Debugger Sample