Italian Chiarimenti su un codice

fabio2222

Member
Salve a tutti purtroppo vorrei gestire degli errori di run time.
In vb 2008 il codice si doveva iniziare cosi: on error goto....
Io ho trovato una cosa simile però non ci ho capito molto mi potete spiegare questo codice:

Sub SomeSub
Try
...some code...
Catch [only executes if error above]
Log(LastException) [optional]
...optional code for error correction...
EndTry
...optional additional code...
End Sub
 

Orazio8909

Member
Licensed User
Longtime User
Ciao fabio, io personalmente utilizzo il try catch per una questione di semplicità, on error goto è ormai superato in dot.net.. cerco di spiegarti tutto il try catch in poche semplici parole:

come ben sai, il try catch viene utilizzato per la gestione degli errori del software o nel caso in cui si presenta un errore imprevisto, e viene inserito all'interno di una sub o routine. tutto il codice che sta all'interno fra TRY e CATCH e il codice che metti tu per eseguiere determinate operazioni o eventi ecc... metre il codice che metti fra catch e end try e il codice per gestire il tuo errore. ti faccio un esempio banale sulla gestione dell'errore di una seriale.

private function con_seriale as integer

With Seriale

.ParityReplace = &H3B
.PortName = con
.Parity = IO.Ports.Parity.None
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
.Handshake = IO.Ports.Handshake.None
.RtsEnable = False
.ReceivedBytesThreshold = 1
.NewLine = vbCr
.ReadTimeout = InfiniteTimeout

End With

Seriale.Open()

call ricevi_dati() 'funzione che vai a richiamare per la ricezione dei dati dalla seriale

end function


private function ricevi_dati() as string

try

'qui andrai ad inserire la routine che serve per la ricezione dei dati dalla seriale.
'metti il caso che per errore viene staccata la seriale dal pc o metti il caso che la scheda con cui stai comunicando impazzisce e perde la comunicazione e tu stai ricevendo dati ogni 500ms ( senza try catch avrai un errore del tipo: (porta COM chiusa) ) invece inserendo il try catch il programma non vede piu la comunicazione e va immediatamente sul catch e esegue il codice per gestire il tuo errore, in questo caso la prima cosa che andrai a fare è quello di vedere se la comunicazione è ancora aperta e di chiuderla..

Catch ex As Exception

'gestisco l'errore della comunicazione

if seriale.isopen = true then ' se la seriale è ancora aperta

seriale.close() 'chiudo immediatamente la comunicazione e visualizzo un messaggio di errore

msgbox("ERRORE DI COMUNICAZIONE")

end if

end try


end function

spero di essere stato chiaro..
 

holdemadvantage

Active Member
Licensed User
Longtime User
on error goto [label] non esiste in b4a
puoi usare try catch per trappare gli errori
Una volta che hai individuato l'istruzione che ti genera l'errore (in debug)
devi scrivere

B4X:
Try
[istruzione]
catch
[istruzioni nel caso l'errore sia generato]
End try

Es.
B4X:
dim bitmap1 as bitmap
Try
bitmap1.loadbitmap(file.dirassets,"uno.jpg")
catch
msgbox("uno.jpg non esiste!","")
end try

Come vedi tra catch / end try trovi il messaggio che compare solo se non hai nessun file "uno.jpg" nella directory "File"
Hope this helps :)
 
Top