Tôi đã gặp phải tình huống như vậy. Ứng dụng WinForms có hai biểu mẫu. Các hình thức chính có một nút, khi người dùng nhấp vào nó, hộp thoại phương thức được hiển thị. Biểu mẫu hộp thoại cũng có một nút, khi người dùng nhấp vào nó, ngoại lệ được ném.Hành vi xử lý ngoại lệ trong ứng dụng WinForms, sử dụng hộp thoại phương thức
Xử lý ngoại lệ khác, khi ứng dụng chạy dưới trình gỡ rối và tự chạy. Đây là mã tối thiểu, tái tạo hành vi này:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
using (var dialog = new Form2())
{
dialog.ShowDialog();
}
}
catch (Exception ex)
{
MessageBox.Show("Oops! " + ex.Message);
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}
Khi gỡ lỗi, nâng cao một ngoại lệ đóng hộp thoại, và xử lý ngoại lệ trong Form1.button1_Click xử lý ngoại lệ.
Khi tự chạy ứng dụng, hãy tăng ngoại lệ không đóng hộp thoại. Thay vào đó, trình xử lý Application.ThreadException mặc định được gọi.
Tại sao (và điều gì làm) hành vi khác nhau? Làm thế nào để mang nó phù hợp với nhau?
cảm ơn! Đây là một câu trả lời về "làm thế nào để" một phần của câu hỏi của tôi. "Tại sao và cái gì cho" vẫn là thực tế ... – Dennis
Đã hiểu; Tại sao/Điều gì cho tôi sẽ đặt xuống đây chỉ là một trong những quirks của khuôn khổ .NET. Tôi có thể đứng sửa chữa, và tôi muốn được quan tâm để biết nếu có ai biết một lý do chính đáng tại sao hành vi này là khác nhau tùy thuộc vào bối cảnh trong đó các ứng dụng đang chạy. Tôi đồng ý rằng đó là một chút của một gotcha. –