Tanken är att man i sin egen kod bara hanterar fel som man vet ska inträffa:
Try
Throw New InvalidAttributeException("Fel på in argumentet!!!")
Catch ex As InvalidAttributeException
'Hanterar felet
End Try
Alla andra fel som man inte vet vad det är låter man propagera hela vägen upp till applikationen som hanterar dom ohanterade felen:
<STAThread()> _
Public Shared Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
AddHandler currentDomain.UnhandledException, AddressOf AppDomainUnhandledException
AddHandler Application.ThreadException, AddressOf ThreadException
app = New Program()
app.Run()
End Sub
Private Shared Sub AppDomainUnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
HandleException(CType(e.ExceptionObject, Exception))
End Sub
Private Shared Sub ThreadException(ByVal sender As Object, ByVal ex As System.Threading.ThreadExceptionEventArgs)
HandleException(ex.Exception)
End Sub
Private Shared Sub HandleException(ByVal e As Exception)
'MessageBox.Show("Ohanterat fel har inträffat!!")
End Sub
Fördelarna som jag ser med detta är att man slipper risken att någon att fångar och sväljer fel bara för att dom inte vet vad man ska göra med felet. Samtidigt tycker jag att man alltid ska fånga alla fel som inträffar i sin kod för att kunna logga felen där dom inträffar. Detta står inte i konflikt med varandra eftersom man alltid kan kasta felet vidare efter man fångat ett exception. Dock bör man ha veta hur man gör för att behålla den fulla stacktracen när man gör det se t.ex:
No comments:
Post a Comment