Большая разница между двумя. Первый из них будет отображаться только в том случае, если вы явно настроите отладчик для остановки при возникновении исключения. Вы делаете это с флажком Debug + Exceptions, Thrown. Вы редко используете это, на самом деле, только когда ваш код содержит слишком много операторов catch, которые неадекватно поглощают исключения и приводят к неправильному поведению кода. Он также умеет показывать исключения в коде, который вы не написали. Нажмите кнопку «Разорвать», чтобы отладчик мог показать вам детали.
Вы получите второй снимок экрана только в том случае, если сгенерировано исключение, и нет блока catch для его захвата, что делает его необработанным исключением. Это фатальная ошибка, программа не может продолжаться. Отладчик останавливается, чтобы показать вам проблему, иначе это конец сеанса отладки. Без отладчика ваша программа потерпит крах. Это «хороший» тип, вы получаете его, пропуская блоки try / catch, чтобы ваша программа завершала работу, когда происходит что-то неожиданное. Вы захотите написать обработчик события для события AppDomain.CurrentDomain.UnhandledException, чтобы пользователь по крайней мере имел представление о том, что пошло не так. И вы в этом отношении.