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