У меня проблема с тем, что исключение, генерируемое из средства доступа к набору свойств, не перехватывается моим глобальным обработчиком исключений.
У меня возникла проблема в более крупном приложении, и после большого скрежета зубов я решил проблему и попытался повторить проблему в более простом проекте.
Ниже приведен код и поведение. Может кто-нибудь объяснить это поведение, пожалуйста, и как мне правильно написать код для достижения желаемого результата, за исключением того, что глобальный обработчик событий перехватит исключение.
//Program.cs - Wire up global exception handling
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.Run(new Form1());
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show("Exception occured : " + e.Exception.Message);
}
*
//In main form create instance of class containing bound property and setup databinding
//to numericUpDown control
private void Form1_Load(object sender, EventArgs e)
{
_car = new Car();
_car.NumberOfWheels = 4;
numericUpDown1.DataBindings.Add(new Binding("Value", _car, "NumberOfWheels", true, DataSourceUpdateMode.OnPropertyChanged));
}
*
public int NumberOfWheels
{
get { return _numberOfWheels; }
set
{
if (value < 4)
//Throw some exception
throw new ArgumentNullException("Argument null exception trigger in Number Of Wheels property");
_numberOfWheels = value;
}
}
Если я установлю точку останова в строке 'throw new ArgumentNullException', программа непременно сломается в этой точке, когда я изменю значение элемента управления numericUpDown (который связан со свойством NumberOfWheels). Однако это единственный способ определить, было ли выброшено исключение. Через интерфейс пользователя не выводится сообщение о том, что генерируется исключение, т. Е. Оно не перехватывается глобальным обработчиком исключений.
В отличие от этого, если я изменяю значение свойства с помощью нажатия кнопки, то обработчик генерирует исключение И перехватывает его с отображаемым окном сообщения.
Чего мне не хватает?