Прошу прощения, если это простой вопрос (мой Google-Fu может быть плохим сегодня).C# - WinForms - Обработка исключений для событий
Представьте, что это приложение WinForms имеет такой тип дизайна: Основное приложение -> показывает одно диалоговое окно ->, что в первом диалоговом окне может отображаться другое диалоговое окно. Оба диалога имеют кнопки ОК/Отмена (ввод данных).
Я пытаюсь выяснить какую-то глобальную обработку исключений по строкам Application.ThreadException. Я имею в виду:
В каждом из диалогов будет несколько обработчиков событий. Второй диалог может иметь:
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
}
}
Действительно, все обработчики событий в этом диалоговом окне должны обрабатываться таким образом. Это исключительный случай, поэтому я просто хочу записать всю соответствующую информацию, показать сообщение и отключить кнопку «ОК» для этого диалога.
Но, я хочу избежать попытки/улова в каждом обработчике событий (если бы мог). Ничейный защитник все эти попытаться/поймать заключается в следующем:
private void someFunction()
{
// If an exception occurs in SelectedIndexChanged,
// it doesn't propagate to this function
combobox.selectedIndex = 3;
}
Я не верю, что Application.ThreadException этого решения, потому что я не хочу исключения падать весь путь-обратно к 1-й диалог, а затем основное приложение. Я не хочу закрывать приложение, я просто хочу его зарегистрировать, отобразить сообщение и позволить им отменить диалог. Они могут решить, что делать оттуда (возможно, пойти в другое место в приложении).
В принципе, «глобальный обработчик» находится между 1-м диалоговым окном и вторым (а затем, я полагаю, другим «глобальным обработчиком» между основным приложением и 1-м диалоговым окном).
Спасибо.
Как я уже говорил в другом месте, это приложение предприятие так что программа аудита (пользователь нажал на эту кнопку, и т.д.) и каротаж во многих наших мероприятиях. Это те вещи, которые, как я думаю, могут потерпеть неудачу. Вы правы, код SelectedIndexChanged (за исключением того, что я упоминал) редко терпит неудачу. Возможно, я выбрал плохое событие в моем вопросе. – JustLooking