Điều này liên quan đến một số previous question.Tại sao ngoại lệ AppDomain luôn kết thúc ứng dụng?
Những gì tôi đang cố gắng hiểu bây giờ là làm thế nào đến trường hợp ngoại lệ thread UI có thể được ngăn chặn từ chấm dứt ứng dụng trong khi không ngoại lệ UI không thể được.
Để tham khảo, hãy xem this example.
Quan trọng nhất, những gì tôi muốn có thể làm trong trường hợp đó là "âm thầm" chấm dứt quá trình - mà không hiển thị hộp thoại Windows hỏi tôi có muốn gửi báo cáo lỗi hay không.
Đây là AppDomain UnhandledExceptionHandler tôi:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// Maybe do some logging here if allowed
}
catch
{
}
// then just terminate the application
Application.Exit();
}
CẬP NHẬT
Trong ánh sáng của bình luận trong this answer, tôi muốn làm rõ rằng điều quan trọng nhất mà tôi muốn tìm hiểu thêm về các cơ chế cho phép chuỗi giao diện người dùng có cơ hội sớm để nắm bắt ngoại lệ không được xử lý thông qua cơ chế Application.ThreadException
. Và liệu hành vi đó có thể được triển khai trên một chuỗi không phải UI hay không.
@Reed: "trường hợp ngoại lệ Unhandled trong thread UI sẽ gây ra cùng điều xảy ra. " - Đây không phải là sự thật. Vui lòng tạo một ứng dụng thử nghiệm và tự mình thử. –
Về mặt kỹ thuật, tôi nên nói "Ngoại lệ không chính xác trên chuỗi chính". Windows Forms thêm hành vi xử lý ngoại lệ của riêng nó vào luồng giao diện người dùng (vì nó hoàn toàn chạy trên luồng giao diện người dùng) làm thay đổi hành vi của luồng chính. Tạo một ứng dụng giao diện điều khiển và thử điều này, và bạn sẽ thấy không có vấn đề gì xảy ra với chủ đề - tất cả chúng sẽ làm hỏng ứng dụng. –
Sau đó, tôi nên restate câu hỏi của tôi: Làm thế nào để thread UI hoàn thành hành vi xử lý ngoại lệ chung của nó? Đó có phải là một cái gì đó tôi có thể sao chép như hành vi cho một chủ đề không phải UI? –