Hãy xem xét các ứng dụng đơn giản sau đây: một hình thức cửa sổ được tạo ra bởi một "mới C# cửa sổ ứng dụng" chuỗi trong VS đã được sửa đổi một cách sau:bắt ngoại lệ trong Main() phương pháp
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show("An unexpected exception was caught.");
}
}
Form1.cs chứa các sửa đổi sau:
private void Form1_Load(object sender, EventArgs e)
{
throw new Exception("Error");
}
Nếu tôi nhấn F5 trong IDE, như tôi mong đợi, tôi thấy hộp thông báo cho biết ngoại lệ đã bị bắt và ứng dụng thoát.
Nếu tôi đi tới Debug (hoặc Release)/bin và khởi động tệp thực thi, tôi thấy cửa sổ "Ngoại lệ không khớp" chuẩn, có nghĩa là trình xử lý ngoại lệ của tôi không hoạt động.
Rõ ràng, điều đó có liên quan đến ngoại lệ được ném từ một luồng khác mà Application.Run được gọi từ đó. Nhưng câu hỏi vẫn còn - tại sao các hành vi khác nhau tùy thuộc vào việc ứng dụng đã được chạy từ IDE hay từ dòng lệnh? Thực hành tốt nhất để đảm bảo rằng không có trường hợp ngoại lệ nào không được giải quyết trong đơn đăng ký?
@Corvin: vui lòng kiểm tra câu trả lời được chấp nhận, nếu bạn cảm thấy bạn có giải pháp cho câu hỏi của mình. –