속성 설정 접근 자에서 throw되는 예외가 전역 예외 처리기에서 발견되지 않는 문제가 있습니다.바운드 속성에서 Databound numericupdown 'hiding'예외가 throw되었습니다.
더 큰 응용 프로그램에서 문제가 발생했으며 문제를 해결하는 데 많은 문제가 발생하여 간단한 프로젝트에서 문제를 재연하고 성공했습니다.
다음은 코드와 동작입니다. 누군가가이 동작을 설명해 주시겠습니까? 그리고 전역 이벤트 처리기에 의해 예외가 잡히는 원하는 결과를 얻기 위해 어떻게 올바르게 코딩해야하는지. 나는 프로그램이 확실히이 시점 경우에 중단됩니다 '새 경우 ArgumentNullException을 던져'줄에 중단 점을 설정하면
//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;
}
}
NumberOfWheels 속성에 바인딩 된 numericUpDown 컨트롤의 값을 변경합니다. 그러나 이것은 예외가 발생했는지를 탐지하는 유일한 방법입니다. UI를 통해 던져지는 예외, 즉 전역 예외 처리기에서 포착되지 않는 메시지는 표시되지 않습니다.
버튼을 클릭하여 속성의 값을 변경하면 예외가 발생하고 처리기에서 메시지 상자가 표시되면서 예외가 발생합니다.
무엇이 누락 되었습니까?