.net зависает на Application.DoEvents
Одним из наших устаревших продуктов является приложение Winforms, и вместо использования фоновых потоков оно выполняет все в основном потоке пользовательского интерфейса. В этом основном потоке выполняется постоянный цикл, который вызывает Application.DoEvents() каждые 20 мс. Время от времени приложение просто зависает при вызове DoEvents. У меня вопрос: как узнать, в каком вызове события из очереди висит код?
PS Кто-нибудь знает инструмент, который я могу использовать для отслеживания стека каждого потока в процессе?
Кроме того, это происходит только на производственном клиенте, и теперь мы должны исправить ситуацию. Также нет возможности установки VS на клиенте.
2 ответа
Я нашел инструмент, который искал. WinDbg
Он может получить трассировку стека для текущего запущенного процесса Windows. Однако для этого приложения требуются файлы PDB.
Вы можете сделать это в Visual Studio, просто присоединиться к процессу, прервать выполнение и открыть окна потоков.
Меню: Отладка->Windows-> Темы