Wpf - как обнаружить замороженный пользовательский интерфейс
У меня есть приложение, и оно зависает после длительного использования . Я много читал о возможных причинах (перегрузка потока пользовательского интерфейса, утечки и т. д.). Но вместо того, чтобы получить корень проблемы, я хотел бы обнаружить, когда он находится в замороженном состоянии, и перезапустить/перезагрузить его.
Я могу проверить, когда процесс не реагирует/жив, но это не то, что я имел в виду.
Как я могу знать, что мой пользовательский интерфейс ( или поток пользовательского интерфейса) заморожен ? Я проверил системы watcherdog, но до сих пор не могу определить, когда приложение его заморозит.
Что я уже пробовал:
Мне удалось
UnhandledExceptionиз приложения для того, чтобы перезапустить приложение , а также я проверяю, если процесс все еще жив, но не то, что я действительно хочу.
[no name]
Это ваша ошибка, у вас на самом деле нет другого выбора, кроме как исправить ее. Чтение об этом-очень легкое начало. Вы должны разработать свою собственную гипотезу о проблеме, а затем разработать способ подтвердить или опровергнуть эту гипотезу.
Несмотря на мое предыдущее заявление прочтите это: Как отлаживать сбои и зависания – Кирилл Осенков[^]
[no name]
Как бы вы логически подумали, что ваша программа может контролировать себя, когда она не реагирует? Или вы думаете, что какой-то волшебный процесс может знать, что ваша программа не отвечает?
Asgard25
Я не так уверен насчет WPF, но если вам действительно нужно его протестировать, создайте новый поток, не связанный с пользовательским интерфейсом, в Application_Startup, я бы сказал. Получите процесс вашего приложения(Process.GetProcesses ()) и проверьте, отвечает ли он, если нет, убейте и запустите его снова. Просто сделайте правильное тестирование, когда делаете это.