Cách tránh lỗi do không Try Catch |
Trả lời
|
| Tác giả | |
orange
Thành viên năng động
Gia nhập: 17 Jan 2010 Đến từ: Hà nội Trạng thái: Offline Bài viết: 507 |
Tùy chọn bài viết
Trích dẫn Trả lời
Chủ đề: Cách tránh lỗi do không Try CatchĐăng: 10 Mar 2010 vào lúc 3:13pm |
|
Cách tránh lỗi do không Try Catch làm ngưng chương trình
Từ trước đến nay khi phát triển ứng dụng .NET ta rất hay gặp những Exception không mong muốn. Cái khổ là những Exception này không được Try Catch làm chết cả chương trình. Để Try Catch được toàn bộ lỗi thì hầu như đồng nghĩa mọi Method ta đều phải Try Catch. Quá mệt mỏi!
Có một cách để có thể handle được toàn bộ các Exception và show message lên cho người sử dụng mà không cần thiết phải Try Catch ở toàn bộ các Method: Dùng Event UnhandledException của hệ thống. Đặc điểm của Event UnhandledException: - Fire mỗi khi có một Exception không được Try Catch (Thế mới hay chứ)- Chỉ Fire nếu chương trình chạy ở chế độ Runtime. Nếu chạy ở Debug thì sẽ không bao giờ handle được. - Cho phép lựa chọn kết thúc chương trình hoặc chạy tiếp Cách sử dụng như sau: Trong ApplicationEvent ta thêm hàm xử lý :
Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException MessageBox.Show(String.Format(My.Resources.System_UnhandleException_Message, e.Exception.ToString), Me.Info.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) e.ExitApplication = False End Sub
Trong C# thì cách sử dụng hơi khác một chút. Bạn phải sử dụng event AppDomain.CurrentDomain.UnhandledException và delegate UnhandledExceptionEventHandler để xử lý. Ví dụ: static event UnhandledExceptionEventHandler UnhandledException = new UnhandledExceptionEventHandler(UnhandleProcess);static void UnhandleProcess(object sender, UnhandledExceptionEventArgs e){ Exception ex = (Exception)e.ExceptionObject; MessageBox.Show(ex.Message); //e.IsTerminating = true; } Trong hàm void Main() bạn đăng ký eventAppDomain.CurrentDomain.UnhandledException += UnhandledException; |
|
|
Quá khứ đã là lịch sử. Tuơng lai là một mầu nhiệm. Còn hiện tại là một món quà của cuộc sống. Chính vì thế mà chúng ta gọi đó là tặng phẩm
|
|
![]() |
|
Trả lời
|
| Chuyển diễn đàn | Quyền hạn trong diễn đàn ![]() Bạn không thể đăng chủ đề mới trong diễn đàn Bạn không thể trả lời cho chủ đề trong diễn đàn Bạn không thể xóa bài viết của bạn trong diễn đàn Bạn không thể sửa bài viết của bạn trong diễn đàn Bạn không thể tạo bình chọn trong diễn đàn Bạn không thể bình chọn trong diễn đàn |