обнаружить ContextDeadlockSwitch во время выполнения - PullRequest
0 голосов
/ 13 мая 2011

AC # код извлекает значение свойства из DLL C ++, и этот поиск блокирует текущий поток, пока dll не вернет значение.В режиме отладки, когда получение занимает много времени, MDA генерирует ContextDeadlockSwitch.

Я полагаю, что невозможно перехватить ContextDeadlockSwitch во время выполнения, но есть ли способ, которым механизм, подобный MDA, может броситьпохожее исключение, которое C # может перехватить для обнаружения этого тупика?

Причина заключается в том, чтобы код C # подсказывал пользователю либо продолжать ждать еще несколько секунд, либо принудительно убивать и перезапускать приложение.

1 Ответ

1 голос
/ 13 мая 2011

Вы можете выполнить вызов в C ++ dll в другом потоке, используя ожидание с таймаутом на ManualResetEvent для завершения сигнала; по истечении времени ожидания вы можете спросить пользователя, хотят ли они продолжить. Обратите внимание, что если COM-объект DLL находится в STA, вам может потребоваться создать объект в квартире, зарезервированной для него, и выполнить маршалл, чтобы предотвратить его замораживание потока GUI, когда он выходит на обед.

...