Я видел, как System.Drawing выбрасывает исключения OutOfMemoryException, даже если ему не хватает памяти.Некоторые функции GDI +, по-видимому, просто возвращают глупый код ошибки.
IIRC, вы получите исключение OutOfMemoryException, если попытаетесь использовать LinearGradientBrush для заполнения прямоугольника, ширина или высота которого равна нулю.Могут быть и другие условия, но это главное, с которым мы столкнулись.
В этом случае нет необходимости пытаться поймать.Просто добавьте оператор if
в код вашего чертежа и не заполняйте прямоугольник, если ширина или высота равна нулю.
Обновление: согласно комментариям к этот ответ , оноЭто также может произойти, если вы попытаетесь загрузить поврежденный файл изображения.Для этого у вас не будет иного выбора, кроме как выполнить try / catch.
Вероятно, вы можете безопасно перехватывать исключения OutOfMemoryException из GDI +, но оставляйте блоки try как можно меньше.Рассмотрите возможность регистрации исключений, чтобы вы могли анализировать журналы и добавлять защитный код, где это возможно.Вы не хотите маскировать real OutOfMemoryException, но вы не хотите, чтобы глупый код ошибки GDI + также приводил к сбою приложения.