2008-08-05 37 views
33

Khi làm việc trên các dự án ASP.NET 1.1, tôi luôn sử dụng Global.asax để bắt tất cả các lỗi. Tôi đang tìm một cách tương tự để bắt tất cả các ngoại lệ trong một điều khiển người dùng Windows Forms, mà kết thúc lên được một điều khiển trình duyệt IE. Cách thích hợp để làm gì đó như thế này?Xử lý ngoại lệ toàn cầu để điều khiển winforms

+0

Ngoài ra, hãy xem [câu hỏi của tôi] (http://stackoverflow.com/questions/944/unhandled-exception-handler-in-net-11) đối với một số cạm bẫy (liên kết đến một cặp vợ chồng) mã hóa các mục blog kinh dị). – Ray

Trả lời

6

Nếu bạn đang sử dụng VB.NET, bạn có thể nhấn vào ApplicationEvents.vb rất thuận tiện. Tệp này được cung cấp miễn phí với dự án VB.NET WinForms và chứa phương thức xử lý unhandled exceptions.

Để có được tập tin tiện lợi này, đó là "Project Properties >> Application >> Sự kiện Application"

Nếu bạn không sử dụng VB.NET, sau đó yeah, nó xử lý Application.ThreadException.

11

Hiện nay trong ứng dụng winforms của tôi, tôi có xử lý cho Application.ThreadException, như trên, nhưng cũng AppDomain.CurrentDomain.UnhandledException

Hầu hết các trường hợp ngoại lệ đến qua xử lý ThreadException, nhưng một trong những AppDomain cũng đã thu hút được một vài kinh nghiệm của tôi

+3

Mã mẫu từ MSDN cho biết cách bắt cả hai loại ngoại lệ chưa được xử lý: [msdn] (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx) –

2

Mã từ MSDN: http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

Sub Main() 
    Dim currentDomain As AppDomain = AppDomain.CurrentDomain 
    AddHandler currentDomain.UnhandledException, AddressOf MyHandler 

    Try 
    Throw New Exception("1") 
    Catch e As Exception 
    Console.WriteLine("Catch clause caught : " + e.Message) 
    Console.WriteLine() 
    End Try 

    Throw New Exception("2") 
End Sub 

Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs) 
    Dim e As Exception = DirectCast(args.ExceptionObject, Exception) 
    Console.WriteLine("MyHandler caught : " + e.Message) 
    Console.WriteLine("Runtime terminating: {0}", args.IsTerminating) 
End Sub 
3

Để Xử lý ngoại lệ toàn cầu ...

Windows Application

System.Windows.Forms.Application.ThreadException kiện

thường được sử dụng trong phương pháp chính. Tham khảo MSDN Thread Exception

Asp.Net

System.Web.HttpApplication.Error kiện

thường được sử dụng trong tập tin Global.asax. Tham khảo MSDN Global.asax Global Handlers

Console Application

System.AppDomain.UnhandledException kiện

Thường được sử dụng trong phương pháp chính. Tham khảo MSDN UnhandledException