是否有方法通过从非托管代码中评测API IC.ProfilerInfo或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
}
您可以使用ICorDebug.GetProcess
获取ICorDebugProcess
,从中可以通过调用GetThread
获取ICorDebugThread
。然后调用GetUserState
获取CorDebugUserState。不过,在使用ICorDebug时要注意,调试器和被调试对象必须是不同的进程。