Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Dubbio sul blocco Try...End Try

Ciao ragazzi,
ieri ero a Padova per il Webbit e mi son beccato il seminario da vb6 a
vb.net
 di Andrea Saltarello. Avrei voluto salutarlo, ma ero anche impegnato
ad inseguire la mia ragazza ad altri seminari....
Vorrei chiedervi un dubbio che mi č venuto, ovviamente parlando di .NET.
Allora, supponiamo....
Try
        'Divisione
Catch
        'Intercetto i vari possibili errori sulla divisione
Finally
        'codice CHE VA ESEGUITO COMUNQUE
End Try
Ecco, ok. Domanda: se il codice inserito nella clausola Finally viene
eseguita comunque, perchč non basta inserirlo al di fuori del blocco
Try...End Try ?
Tanto verrebbe eseguita comunque, sia in caso di errore, sia nel caso in cui
sia andato tutto bene.
Perchč quindi viene detto di inserirlo nel Finally ? Cosě:
Try
        'Divisione
Catch
        'Intercetto i vari possibili errori sulla divisione
End Try
'codice CHE VA ESEGUITO COMUNQUE
cosa cambia? non capisco.....
good coding!!!
--
Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King

 good coding!!!
ricambio: finito Webb.it, da domani si torna sulle "tasiere vere" :-)
-- 
.A
UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org
Read my blog at: 
http://www.ugidotnet.org/4.blog

 cosa cambia? non capisco.....
Anche a me da Vbseisti e' + chiara una forma :
try
    (qualcosa)
catch
    (Errore)
endtry
(Esegui sempre)
diciamo che il blocco finaly per ora l'ho usato solo nelle sub semplici con
1 controllo solo di errore, altrimenti non ho capito a che cavolo serve
nemmeno io visto che oltre tutto nemmeno l'end try ne salta l'esecuzione !
try
    (qualcosa)
catch
    (Errore)
endtry
try
(Esegui sempre)
catch
    (errore)
Endtry
diventa un appendersi di rami come questo :
try
    (qualcosa)
catch
    (Errore)
finaly
    try
        (cerca di eseguirlo sempre)
    catch
        (errore)
    finally
            .... (ripeti diramazione)
    end try
end try
bha !
io avrei gradito che fosse sensibile al EndTry, cosi almeno uno poteva
organizzare una cosa tipo :
try
    (bad code)
catch errore 1
    msgbox Errore 1 senza cleanup
    exit try
catch errore 2
    msgbox Errore 2 CON cleanup.
catch errore 3
    msgbox Errore 3 CON cleanup.
Finally
    esegui sto codice se non e' stato chiamato un exit try permettendo il
riuso del codice stesso... bha !
end try
-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 good coding!!!
quoto l'indicato da Andrea,
trovo il Finally utilissimo,
es. scrivere passaggi che vanno eseguiti obbligatoriamente.
Si inseriscono subito, si diminusce la propabilità della dimenticanza.
Es. chiudere la connessione,
un datareader,
ripristinare il cursore predefinito,
ecc.
Ave
giuseppeD

 finaly
es.
Try
    open connessione
    'finito la devo chiudere.
    'quindi verrebbe se non ho errori
    chiudi connessione
catch ex as execption
       'in caso di errore
       chiudi connessione
end try
la chiusura la devo scrivere due volte
- vediamo con il finally
Try
    open connessione
catch ex as execption
    messagebox.show(ex.message)
finally
    chiudo connessione
end try
La chiusura della connessione la inserisco una sola volta
Anzi per abitudine è la prima che scrivo,
non devo pensare dove è giusto inserirla
Comunque la esegue.
Ave
giuseppeD

 end try
' ex finaly
 chiudi connessione ' lo eseguo comunque
Mentre nota che la clausola try end try prevede diversi catch
quindi Ribadisco che sarebbe stato molto piu' utile per il riuso del codice
che Almeno fosse sensibile al ExitTry
(non funzionante)
sub prova
try
    apri connessione
    esegui delle operazioni
    ....
catch ex as database non trovato
    msgbox errore che deve chiudere il DB
    exit try '<- salta al finally
catch ex as modifica impossibile della tabella
    msgbox errore che non ha bisogno della chiusura
    ' da qui salta DOPO l'end try
Finally
    (chiudo connessione se, e solo se necessario riutilizzando il codice,
altrimenti la lascio viva)
    msgbox "per un errore tra tutti i catch di sopra con l'end try e' stato
necessario abbandonare la sub quindi _
                    ho scritto una sola volta il codice di cleaunup)
     exit sub
end try
(codice che verra' eseguito solo se e' statosollevato un errore non
irreversibile)
end sub
Non ti pare che siano questi i casi maggiori in cui si poteva gestire il
riutilizzo del codice ?


 riutilizzo del codice ?
E' possibile impostare una serie in sequenza di cattura di errori
personalizzati,
Posso come un select case, scrivere una decina di
catch ex as system.MissingMemberException
catch ex as System.MissingMethodException
ecc.
e per finire un
Finally
codice di pulitura
End Try
Ave
giuseppeD