Я принимаю следующий шаблон при предложении таких опций:
DialogResult result = DialogResult.Retry;
while (result == DialogResult.Retry) {
try {
DoProcess();
break;
}
catch {
result = MessageBox.Show(errorMessage, caption, MessageBoxButtons.AbortRetryIgnore);
if (result == DialogResult.Abort) throw;
}
}
Если пользователь выберет «Повторить», цикл снова запустится. Если пользователь нажимает кнопку «Прервать», будет сгенерировано исключение (которое будет перехвачено далее по цепочке и, следовательно, прервет оставшуюся часть операции). Игнорирование приведет к выходу из цикла без исключения. Я не могу придумать более краткий способ сделать это.