Я видел в нескольких проектах своеобразное исключение catch для исключения всех непредвиденных исключений, поэтому приложение не будет разбиваться, я вижу это обычно с помощью
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(myUnexpectedExhandler);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(threadExHandler);
Это хорошая или плохая практика.