.net зависает на Application.DoEvents

Одним из наших устаревших продуктов является приложение Winforms, и вместо использования фоновых потоков оно выполняет все в основном потоке пользовательского интерфейса. В этом основном потоке выполняется постоянный цикл, который вызывает Application.DoEvents() каждые 20 мс. Время от времени приложение просто зависает при вызове DoEvents. У меня вопрос: как узнать, в каком вызове события из очереди висит код?

PS Кто-нибудь знает инструмент, который я могу использовать для отслеживания стека каждого потока в процессе?

Кроме того, это происходит только на производственном клиенте, и теперь мы должны исправить ситуацию. Также нет возможности установки VS на клиенте.

2 ответа

Решение

Я нашел инструмент, который искал. WinDbg

Он может получить трассировку стека для текущего запущенного процесса Windows. Однако для этого приложения требуются файлы PDB.

Вы можете сделать это в Visual Studio, просто присоединиться к процессу, прервать выполнение и открыть окна потоков.

Меню: Отладка->Windows-> Темы

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