В Google Chrome используется метод (часто называемый разделением процессов), при котором пользовательский интерфейс "хоста" управляет дочерними процессами, которые он может обнаружить, перестав отвечать на запросы (или, что еще хуже, выдавая ошибку и закрываясь). Он запускает новый процесс для каждой открытой вкладки.
Вот статья с кратким описанием этого более детально.
Используя класс .net Process, вы можете запускать процессы , проверьте, реагируют ли они, и даже убейте их.
Если вы хотите встроить окно процесса в свое собственное, вы можете использовать функции платформы, такие как SetParent для перемещения одного окна в другое. Боюсь, я не знаю об управляемой альтернативе SetParent при работе с формами, но я подозреваю, что она существует, поэтому стоит поискать ее перед использованием SetParent.
Если хост-процесс дает сбой, простое использование чего-то вроде AppDomain.CurrentDomain.UnhandledException
позволит вам получить уведомление о том, что произошло исключение верхнего уровня, но на этом этапе вы вряд ли сможете предсказать состояние объектов в вашем приложении и перезапустить ( наряду с некоторым ведением журнала и уведомлением пользователя), вероятно, является вашим единственным разумным вариантом.
Обработка исключений верхнего уровня: подробно описано здесь.
person
Matt Brindley
schedule
12.06.2009