FAQ FAQ  Tìm trong diễn đàn   Lịch   Đăng kí Đăng kí  Đăng nhập Đăng nhập

Cách tránh lỗi do không Try Catch

 Trả lời Trả lời
Tác giả
orange View Drop Down
Thành viên năng động
Thành viên năng động
Hình đại diên

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 Tùy chọn bài viết   Trích dẫn orange Trích dẫn  Trả lờiTrả lời Liên kết trực tiếp tới bài viết 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ý event

AppDomain.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 đầu trang
 Trả lời Trả lời

Chuyển diễn đàn Quyền hạn trong diễn đàn View Drop Down



Trang này đã được tạo ra trong 0.109 giây.