如何通过Profiling API读取System.Threading.Thread.ThreadState(ICofProfilerInfo或任何IMetadataImport或任何其他方式)

时间:2011-11-26 13:16:08

标签: c# .net profiling thread-state imetadataimport

有没有办法如何通过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
}

1 个答案:

答案 0 :(得分:3)

您可以使用ICorDebug.GetProcess获取ICorDebugProcess,通过拨打ICorDebugThread,您可以GetThread获取GetUserState。然后致电{{1}}获取CorDebugUserState。但要注意,使用ICorDebug调试器和debugee时必须使用不同的进程。