Kinna-10626331 Ответов: 0

Wpf - как обнаружить замороженный пользовательский интерфейс


У меня есть приложение, и оно зависает после длительного использования . Я много читал о возможных причинах (перегрузка потока пользовательского интерфейса, утечки и т. д.). Но вместо того, чтобы получить корень проблемы, я хотел бы обнаружить, когда он находится в замороженном состоянии, и перезапустить/перезагрузить его.
Я могу проверить, когда процесс не реагирует/жив, но это не то, что я имел в виду.

Как я могу знать, что мой пользовательский интерфейс ( или поток пользовательского интерфейса) заморожен ? Я проверил системы watcherdog, но до сих пор не могу определить, когда приложение его заморозит.

Что я уже пробовал:

Мне удалось
UnhandledException
из приложения для того, чтобы перезапустить приложение , а также я проверяю, если процесс все еще жив, но не то, что я действительно хочу.

[no name]

Это ваша ошибка, у вас на самом деле нет другого выбора, кроме как исправить ее. Чтение об этом-очень легкое начало. Вы должны разработать свою собственную гипотезу о проблеме, а затем разработать способ подтвердить или опровергнуть эту гипотезу.
Несмотря на мое предыдущее заявление прочтите это: Как отлаживать сбои и зависания – Кирилл Осенков[^]

[no name]

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

Asgard25

Я не так уверен насчет WPF, но если вам действительно нужно его протестировать, создайте новый поток, не связанный с пользовательским интерфейсом, в Application_Startup, я бы сказал. Получите процесс вашего приложения(Process.GetProcesses ()) и проверьте, отвечает ли он, если нет, убейте и запустите его снова. Просто сделайте правильное тестирование, когда делаете это.

0 Ответов