有没有办法如何通过Profiling API ICofProfilerInfo或IMetadataImport接口或任何其他方式从非托管代码读取托管线程的System.Thread.ThreadState属性?
例如:
ICorProfilerInfo3 pProfilerInfo = ...;
ThreadID threadId;
pProfilerInfo->GetCurrentThreadID(&threadId);
ThreadState threadState;
pSomethingWhatINeed->GetManagedTheadState(threadId, &threadState);
if(threadState == THREADSTATE_WAIT_JOIN_SLEEP){
//do something
}
答案 0 :(得分:3)
您可以使用ICorDebug.GetProcess
获取ICorDebugProcess
,通过拨打ICorDebugThread
,您可以GetThread
获取GetUserState
。然后致电{{1}}获取CorDebugUserState。但要注意,使用ICorDebug调试器和debugee时必须使用不同的进程。