Ответ 1
Так как .NET Framework 2.0, StackOverflowException
невозможно поймать. Это потому, что считается плохой практикой. Цитирование документации MSDN:
Начиная с .NET Framework версия 2.0, a
StackOverflowException
объект не может быть захвачен попыткой блок и соответствующий процесс завершено по умолчанию. Вследствие этого, пользователям рекомендуется написать свой код для обнаружения и предотвращения стека переполнение. Например, если ваш приложение зависит от рекурсии, использования счетчиком или условием состояния завершите рекурсивный цикл.
Теперь единственный способ поймать StackOverflowException
- это когда он был сгенерирован кодом пользователя, как описано в блоге Джаредом Парсонсом, Помимо этого, где размещается среда CLR, вы можете обрабатывать (но не ловить) StackOverflowException
и разрабатывать способ, позволяющий выполнять ваши программа продолжается.
Обратите внимание, что из-за того, что стека разматывают, когда возникает исключение, в версиях версии .Net в версиях до версии 2.0 фактически будет намного короче, когда обрабатывается StackOverflowException
, что позволяет сделать это без создания другого StackOverflowException
.