Журнал трассировки стека, когда Windows обнаруживает зависание приложения - PullRequest
5 голосов
/ 14 ноября 2011

Диспетчер окон Windows 7 регулярно определяет мое приложение WPF как зависшее , выдает его и выдает сообщение, которое не отвечает.Я использовал приложение в течение нескольких недель и не видел его, но пользователь с тем же оборудованием, что и я, говорит, что получает его регулярно.

Все, что может быть, - это запуск задачи в другом потоке,поэтому я не уверен, с чего начать искать проблему.Если пользователь ожидает ответа приложения, оно быстро восстанавливается, поэтому я предполагаю, что проблема заключается в потоке графического интерфейса, который иногда занимает чуть более 5 секунд.

Есть ли способ определить, когдаDWM считает, что приложение зависло, поэтому я могу записать трассировку стека?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Я не делал этого в приложении WPF, но традиционным способом было бы отправлять сообщение WM_NULL из фонового потока, время от времени используя SendMessageTimeout, и если основной поток пользовательского интерфейса не обрабатывает сообщение, скажем, , 30 секунд, создать дамп стека для этого потока.

1 голос
/ 15 ноября 2011

Один из подходов - написать трассировку вашей программы, используя System.Diagnostics пространство имен.С этим вы можете узнать, каким было последнее действие перед тем, как ваша программа зависнет.Вы вряд ли будете проверять программу, когда Windows считает ее зависшей.: - (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...