Из того, что я вижу (глядя на разборку mscorwks), это IObjContext*
, возвращенное из CoGetContextToken () .
В основном это выглядит так, как будто вызов ставится в очередь, используя IContextCallback::ContextCallback()
из mscorwks!CtxEntry::EnterContextOle32BugAware()
, который, в свою очередь, вызывает mscorwks!CtxEntry::EnterContextCallback()
, как только контекст объекта (квартира) обрабатывает сообщение. Они используют CLREvent, чтобы сигнализировать о завершении обратного вызова. Для потоков STA отсутствие перекачки сообщений приведет к истечению времени ожидания события, что вызывает MDA ContextSwitchDeadlock.
Примечание: я не запускаю это в отладчике, поэтому не могу подтвердить поведение, но это, вероятно, достаточно точно.