If you put a breakpoint on the TryEnterCriticalSection call you can inspect the state of the critical section in the debugger. You can also look at what the other thread is doing by using the threads window.
The most important values are:
OwningThread - 0x00000000 == none. Otherwise it's the ThreadID of the thread that owns it. Use the Threads window to see which thread that is, and look at what code it's running.
RecursionCount 0 == not locked. Essentially EnterCriticalSection() increments it and LeaveCriticalSection() decrements it.
It's also worth noting that TryEnterCriticalSection() can fail every time due to timing issues. That it it can find that whenever it tries it's locked. The longer the lock is held by other threads the less likely it is to work. In general you should keep them locked for as short a duration as possible. Don't write code that looks like this if you can avoid it:
This version is much better if you don't need the lock inside the process function. Even if Process() does need a lock, can it use a different one?
auto thing = queue.pop_front();