2

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

1 回答 1

3

您可以使用ICorDebug.GetProcessto 获取ICorDebugProcess,您可以ICorDebugThread通过调用从中获取GetThread。然后调用GetUserState以获取CorDebugUserState。但请注意,在使用 ICorDebug 调试器时,被调试者必须是不同的进程。

于 2011-11-26T17:20:42.213 回答