PDA

Visualizza la versione completa : [VB.NET] Gestione errori nell'applicazione


Sabotto
06-04-2020, 14:29
Sto facendo delle prove per delegare la gestione degli errori che avvengono in routine che non hanno un loro Try Catch.
L''istruzione che ho messo nella form_Load dovrebbe inviarmi qualsiasi errore alla Sub GestoreEccezioni
(o perlomeno io pensavo fosse cosi).. Ma in realtà quando scateno un errore di prova, l'IDE ferma l'esecuzione e la gestione dell'errore non viene delegata all'apposita routine.
Dove sbaglio?



Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

AddHandler Application.ThreadException, AddressOf GestoreEccezioni

End Sub

Public Sub GestoreEccezioni(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)

' qui non ci va mai...?!?!
MsgBox("errore gestito da apposita routine!!!")

End Sub



Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

'provoco l'errore per test
Throw New Exception("pippo")

End Sub

Sabotto
06-04-2020, 15:06
Ho modificato il codice usando dei moduli ed ora funziona nel senso cheallo scatenarsi dell'errore viene esguita la mia routine. Ma non riesco a capire a cosa serva questa istruzione


Application.SetUnhandledExceptionMode(UnhandledExc eptionMode.CatchException)

visto che funziona sia se c'è e sia se non c'è.

Ecco il codice modificato. Qualsiasi suggerimento è ben accetto


Public Class Form1


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Throw New Exception("pippo")

End Sub

End Class

Module ModProgramma

Public Sub main()

Application.SetUnhandledExceptionMode(UnhandledExc eptionMode.CatchException)
AddHandler Application.ThreadException, AddressOf ModGestErrori.GestoreEccezioni
Application.Run(Form1)

End Sub


End Module

Module ModGestErrori

Public Sub GestoreEccezioni(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)

MsgBox("errore!!!")
' qui poi implementrò una scrittuta di un log degli errori per eviyare di dover chiedere all'utente
' di spiegarmi che errore ha avuto, quando, ecc ecc

End Sub

End Module





update: sto impazzendo. ora di nuovo non funziona. Nel senso che l'IDE mi intercetta l'errore . poi premendo continua va finalmente nella routine GestoreEccezioni. Perchè?

URANIO
08-04-2020, 14:48
update: sto impazzendo. ora di nuovo non funziona. Nel senso che l'IDE mi intercetta l'errore . poi premendo continua va finalmente nella routine GestoreEccezioni. Perchè?
E' corretto, perchè stai eseguendo l'applicazione in debug.

Sabotto
08-04-2020, 17:48
E' corretto, perchè stai eseguendo l'applicazione in debug.

Si ma non capivo perche a volte si ferma prima sull'errore e a volte va direttamente a mio gestore errori. Ho scoperto che dipende dall'opzione "Just My Code" abilitata o meno.

Loading