Newsgroup: it.comp.lang.visual-basic
Titolo: Re: [Vb.Net] Gestire le eccezioni: ThreadException

 proprietą del progetto e selezionala come "oggetto di partenza"
E in questa metto Application.Run(FormMain)?
Ciao
GigioTD
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Seguendo l'esempio al link seg.:
http://snipurl.com/crhk
sto cercando di implementare una gestione di tutte le eccezioni non gestite.
Purtroppo l'esempio suddetto non funziona, ma io non ho una "sub main", in
quanto ho disegnato le form graficamente e poi, da progetto, ho definito
qual'é il form principale dell'applicazione.
Non riesco quindi a capire qual'é la mia "sub main".... qualcuno é così
gentile da chiarirmi le idee?
Grazie! ;)


 GigioTD
-- 
.A
UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org
Read my blog at: 
http://blogs.ugidotnet.org/pape

 proprietą del progetto e selezionala come "oggetto di partenza"
Allora, ho provato: funziona tutto... tranne il catch dell'eccezione.
Una domanda: ma i try... catch che sono seminati nel mio programma, posso
lasciarli o devo toglierli?
Ciao


Prova a dare un occhiata
http://www.ugidotnet.org/tips/tips_read.aspx?ID=60
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
Weblog: 
http://blogs.ugidotnet.org/corrado/

 
http://www.ugidotnet.org/tips/tips_read.aspx?ID=60
E' proprio quello che ho fatto. Ho creato un modulo in cui includo la classe
"ClasseMain" che, dalle proprietà del progetto, definisco come "Oggetto di
avvio". All'interno della classe c'é la Sub Main() che lancia la form
principale "frmLogin", che fa la connessione al DB e chiama la form
principale.
Purtroppo, però, l'assenza del listener del db viene vista come "eccezione
non gestita" e termina miseramente il programma.
Insomma.... non scattano gli eventi!
La classe che ho usato é questa:
    Public Class ClasseMain
        Shared Sub main()
            Dim Main As New FrmLogin
            AddHandler Application.ThreadException, AddressOf ThreadException
            AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf
UnhandledExceptionFilter
            Application.Run(Main)
        End Sub
        Private Shared Sub ThreadException(ByVal sender As Object, ByVal e As
System.Threading.ThreadExceptionEventArgs)
            MessageBox.Show(e.Exception.Message)
        End Sub
        Private Shared Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e
As UnhandledExceptionEventArgs)
            MsgBox(e.ExceptionObject.ToString, MsgBoxStyle.Information, "Unhandled
error")
        End Sub
    End Class
Ciao e grazie!!


Ho fatto un altro tentativo, guardando quello che viene scritto su
quest'ottimo sito:
http://www.codeproject.com/dotnet/SafeForm.asp
In pratica qui si suggerisce, per chi come me non aveva la sub main(), di
mettere la riga
AddHandler Application.ThreadException, AddressOf OnThreadException
all'interno del costruttore della form, subito prima di
InitializeComponent(). Questa cosa mi piace perché semplifica le cose.
Poi sull'articolo si dice che basta aggiungere la solita routine:
Private Sub OnThreadException(ByVal sender As Object, _
                       ByVal e As ThreadExceptionEventArgs)
  ' This is where you handle the exception
  ' For Instance:
  MessageBox.Show(e.Exception.Message)
End Sub
ma, purtroppo... NULLA. L'eccezione non viene catturata. C'e' qualcosa che
mi sfugge...
:(


 mi sfugge...
Non capisco perche' non intervieni dove l'eccezione potrebbe 
verificarsi. IMHO una gestione centralizzata delle eccezioni
serve a poco o nulla. Se un'eccezione fosse davvero sfuggita
al tuo controllo probabilmente l' applicazione si troverebbe
in uno stato incoerente che potrebbe rovinare eventuali dati
che sta trattando. Ergo, e' meglio che venga terminata prima
che causi danni.
-- 
ciao, hal

 che causi danni.
Terminare l'applicativo ti fa rimediare un bel figurone... non ti dico di
cosa. Ben diversa é la situazione in cui il programma gestisce l'eccezione.
ciao


 cosa. Ben diversa é la situazione in cui il programma gestisce
l'eccezione.
Come fa a "gestirla" se puo' arrivare da qualsiasi parte?
IMHO l'unica cosa che ha senso fare nella gestione centralizzata
e' registrare l'eccezione in un log e salutare educatamente l'utente
prima di terminarsi. Continuare potrebbe essere peggio e si
rischierebbe di fare una figura ancora piu' brutta.
--
ciao, hal
