Почему поведение исключения «ShowDialog» отличается от запуска с подключенным отладчиком Visual Studio?C#

Место общения программистов C#
Anonymous
Почему поведение исключения «ShowDialog» отличается от запуска с подключенным отладчиком Visual Studio?

Сообщение Anonymous »

Подумайте об этом: Form1 запускает Form2 как модальное диалоговое окно с вызовом «System.Windows.Forms.Form.ShowDialog». Form2 выдает исключение в потоке графического интерфейса.

Если бы я запустил эту программу из отладчика Visual Studio, я смог бы перехватить это исключение в месте вызова в Form1 (чего я не ожидал!). Если я не запустил программу без подключенного отладчика, даже если я подключу отладчик позже, я не смогу перехватить исключение из формы 1 (это скорее то поведение, которое я ожидаю).

Почему я могу перехватить исключение в форме 1 при работе под отладчиком? Или, что более важно, Почему наличие отладчика меняет поведение "ShowDialog" при выдаче исключений?

Следующего кода достаточно, чтобы продемонстрировать проблему.

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

public class Form1 : Form
{
public Form1()
{
this.MouseClick += this.OnMouseClick;
}

private void OnMouseClick(object sender, MouseEventArgs e)
{
try
{
var f2 = new Form2();
f2.ShowDialog(this);
}
catch (System.Exception ex)
{
MessageBox.Show(this, ex.Message, "Exception Caught!",
MessageBoxButtons.OK, MessageBoxIcon.Information
);
}
}
}

public class Form2 : Form
{
public Form2()
{
this.MouseClick += this.OnMouseClick;
}

private void OnMouseClick(object sender, MouseEventArgs e)
{
throw new Exception("Hey! That hurts!");
}
}
}

Вернуться в «C#»