Как читать System.Threading.Thread.ThreadState по профилированию API (ICofProfilerInfo или любой IMetadataImport или любой другой)

Есть ли способ прочитать свойство System.Thread.ThreadState управляемого потока с помощью интерфейса Profiling API ICofProfilerInfo или IMetadataImport или любым другим способом из неуправляемого кода?

Например что-то вроде этого:

ICorProfilerInfo3 pProfilerInfo = ...;
ThreadID threadId;
pProfilerInfo->GetCurrentThreadID(&threadId);
ThreadState threadState;
pSomethingWhatINeed->GetManagedTheadState(threadId, &threadState);
if(threadState == THREADSTATE_WAIT_JOIN_SLEEP){
  //do something
}

1 ответ

Решение

Ты можешь использовать ICorDebug.GetProcess получить ICorDebugProcessиз которого можно получить ICorDebugThread позвонив GetThread, Тогда позвони GetUserState получить CorDebugUserState. Осторожно, однако, при использовании отладчика ICorDebug и debugee должны быть разные процессы.

Другие вопросы по тегам