Как читать 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 должны быть разные процессы.