Я прошу прощения, если это простой вопрос (мой Google-Fu сегодня может быть плохим).
Представьте себе это приложение WinForms, которое имеет такой дизайн: Главное приложение -> показывает одно диалоговое окно -> это1-й диалог может показать другой диалог.В обоих диалоговых окнах есть кнопки OK / Отмена (ввод данных).
Я пытаюсь выяснить какой-то тип глобальной обработки исключений в соответствии с Application.ThreadException.Я имею в виду:
В каждом из диалогов будет несколько обработчиков событий.2-й диалог может иметь:
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
AllSelectedIndexChangedCodeInThisFunction();
}
catch(Exception ex)
{
btnOK.enabled = false; // Bad things, let's not let them save
// log stuff, and other good things
}
}
Действительно, все обработчики событий в этом диалоге должны обрабатываться таким образом.Это исключительный случай, поэтому я просто хочу зарегистрировать всю соответствующую информацию, показать сообщение и отключить кнопку «ОК» для этого диалога.
Но я хочу избежать попытки / перехвата в каждом обработчике событий(если бы я мог).Недостаток всех этих try / catch заключается в следующем:
private void someFunction()
{
// If an exception occurs in SelectedIndexChanged,
// it doesn't propagate to this function
combobox.selectedIndex = 3;
}
Я не верю, что Application.ThreadException является решением, потому что я не хочу, чтобы исключение падало весь путь назад.до 1-го диалога, а затем основного приложения.Я не хочу закрывать приложение, я просто хочу зарегистрировать его, отобразить сообщение и позволить им выйти из диалога.Они могут решить, что делать оттуда (может быть, пойти куда-нибудь еще в приложении).
По сути, «глобальный обработчик» между первым диалогом и вторым (а затем, я полагаю, другим «глобальным обработчиком»)."между основным приложением и первым диалогом).