Очевидный ответ - поместить обработчик исключений в начало вашей цепочки выполнения.
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new YourTopLevelForm());
}
catch
{
//Some last resort handler unware of the context of the actual exception
}
}
Это поймает любое исключение, которое происходит в вашем основном потоке GUI. Если вы также хотите глобально перехватывать исключения, возникающие во всех потоках, вы можете подписаться на событие AppDomain.UnhandledException и обработать его.
Application.ThreadException +=
new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)
private static void MyCommonExceptionHandlingMethod(
object sender,
ThreadExceptionEventArgs t)
{
//Exception handling...
}
Код скопирован с Ответ Харит J
Теперь к совету ...
Эти параметры следует использовать только в качестве крайней меры, например, если вы хотите скрыть случайно необработанные исключения из представления пользователю. Вы должны ловить раньше, когда это возможно, когда вы что-то знаете о контексте исключения. Более того, вы можете что-то сделать с этой проблемой.
Структурная обработка исключений может показаться ненужными накладными расходами, которые вы можете обойти с ловушкой, но она существует, потому что это не так. Более того, эта работа должна быть выполнена во время написания кода, когда разработчик имеет свежую логику в уме. Не ленитесь и оставьте эту работу на потом или для более продвинутого разработчика.
Извините, если вы уже знаете и делаете это.