Gestione chiamata function [RISOLTO]

di il
12 risposte

Gestione chiamata function [RISOLTO]

Buonasera a tutti,

ho il seguente quesito per la mia applicazione.

nel form principale ho una textbox dove richiamo una funzione alla pressione del pulsante

    If TextBox1.Text <> Nothing And (Not (ComboBox1.SelectedItem Is Nothing)) And Not (ComboBox2.SelectedItem Is Nothing) Then
        numerotreno = TextBox1.Text
        'chiamo la funzione cercatreno,che interroga viaggiatreno e mi restituisce un json di cui prendo le singole stringhe di interesse
        If CheckBox1.Checked = False Then
            Try
                TextBox4.Text = cercatreno(TextBox1.Text)("compOrarioPartenza")
Catch ex As Exception
                MessageBox.Show("ATTENZIONE TRENO NON VALIDO", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Try
End Try

La funzione si trova in un modulo separato;

SE la funzione va in errore, da un messaggio di errore correttamente in quanto anche nella funzione ho gestito l'errore.

 Dim jsonviaggiatreno As String
Dim numerotreno As String = treno
 Dim stazione As String
    Dim timestamp As String
    Dim idstazione As String

    Dim currentTimeUTC As DateTime = Today.ToUniversalTime
    currentTimeUTC.ToLocalTime.ToString("dd/mm/yyyy")
    Dim timesceltautente As Double = GetUnixTimestampFromVBdatetime(currentTimeUTC)
    Return viaggiatreno

Catch ex As Exception
   MessageBox.Show("ERRORE NELL'ELABORAZIONE DATI TRENO")
   MsgBox(ex.Message.ToString)
End Try

il problema è che nella form principale ,nonostante la presenza del try …viene generato un nuovo errore non gestito e non capisco come sia possibile.

mi chiedevo : 

  1. se c'è modo di intercettare l'errore della form principale
  2. se c'è modo di capire quale pulsante sta chiamando la funzione e creare delle exit sub personalizzate.

qualunque consiglio è ben accetto.

12 Risposte

  • Re: Gestione chiamata function [RISOLTO]

    Ma come hai scritto questa chiamata?

    cercatreno(TextBox1.Text)("compOrarioPartenza")

    Quali parametri hhA la cercarono?

    Mostra lo stack delle chiamate

  • Re: Gestione chiamata function [RISOLTO]

    La funzione cercatreno ha come ingresso il valore di textbox1.text

    e ottiene come risposta un json di cui prende il token  "comporariopartenza" che viene assegnato a textbox4.text

    quale sarebbe il modo migliore di usarla ?

    ecco lo stack chiamate 

  • Re: Gestione chiamata function [RISOLTO]

    Ma se la funzione cercatreno ha un solo parametro stringa, che senso ha chiamarla così?

    cercatreno(TextBox1.Text)("compOrarioPartenza")
  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - oregon ha scritto:


    Ma se la funzione cercatreno ha un solo parametro stringa, che senso ha chiamarla così?

    Secondo me, la funzione cercatreno (sorvoliamo sugli standard di codifica non rispettati) restituisce un oggetto (il treno) corrispondente al nome specificato come parametro, quindi la parte tra parentesi successiva è una estrazione di un valore che fa parte di quell'oggetto.

    Dividere le due istruzioni sarebbe molto meglio, in termini di leggibilità.

    Se quanto sospetto è vero, la causa è abbastanza semplice: la funzione cercatreno() non trova il treno richiesto, restituisce un valore nullo (Nothing in VB.NET), quindi l'accesso al dato “compOrarioPartenza” fallisce per forza di cose.

    09/11/2023 - eurostar_italia ha scritto:


    La funzione cercatreno ha come ingresso il valore di textbox1.text

    e ottiene come risposta un json di cui prende il token  "comporariopartenza" che viene assegnato a textbox4.text

    quale sarebbe il modo migliore di usarla ?

    Leggi sopra e chiediti questo: se il treno non viene trovato, cosa succede al programma con il tuo codice?
    Qual è il token che viene letto da un treno che non è stato individuato?

    La risposta a queste domande è probabilmente la soluzione che stai cercando.

  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - Alka ha scritto:


    Secondo me, la funzione cercatreno (sorvoliamo sugli standard di codifica non rispettati) restituisce un oggetto (il treno) corrispondente al nome specificato come parametro, quindi la parte tra parentesi successiva è una estrazione di un valore che fa parte di quell'oggetto.

    è esattamente cosi : la funzione restituisce un json corrispondente al nome di treno specificato.

    Se quel treno non viene trovato (perchè il numero non esiste ad esempio) la funzione va in errore MA viene gestito.

    il problema è che l'assegnazione diretta fa fallire anche la sub button5.click dove 

     TextBox4.Text = cercatreno(TextBox1.Text)("compOrarioPartenza")

    anche se è all'interno di un blocco try catch.

    ora quale sarebbe il modo migliore per gestire l'erorre in questa fase ,quando cercatreno riceve un valore null?

  • Re: Gestione chiamata function [RISOLTO]

    Viene gestito ma cosa restituisce in quel caso? Se restituisce Nothing, devi modificare la chiamata in modo da testare il valore restituito prima di usarlo. Se è Nothing agisci di conseguenza

    Mostra il codice della funzione

  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - eurostar_italia ha scritto:


    ora quale sarebbe il modo migliore per gestire l'erorre in questa fase ,quando cercatreno riceve un valore null?

    Dim MioTreno = CercaTreno("NomeTreno")
    If MioTreno Is Nothing Then
      ' ...
    End If

    Tu hai gestito tutto come eccezione, come se tutto fosse un errore, ma in realtà sono solamente condizioni perfettamente verificabili da codice e “gestibili” semplicemente facendo cose diverse a seconda dei valori che si ottengono.

    Non vedo tutta questa complessità e questa esigenza di questa miriade di Try…Catch che alla fine sono inutili e servono solo a visualizzare delle Message Box, e non a gestire efficacemente un errore (che non c'è).

  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - Alka ha scritto:


    09/11/2023 - eurostar_italia ha scritto:


    ora quale sarebbe il modo migliore per gestire l'erorre in questa fase ,quando cercatreno riceve un valore null?

    Dim MioTreno = CercaTreno("NomeTreno")
    If MioTreno Is Nothing Then
      ' ...
    End If

    Tu hai gestito tutto come eccezione, come se tutto fosse un errore, ma in realtà sono solamente condizioni perfettamente verificabili da codice e “gestibili” semplicemente facendo cose diverse a seconda dei valori che si ottengono.

    Non vedo tutta questa complessità e questa esigenza di questa miriade di Try…Catch che alla fine sono inutili e servono solo a visualizzare delle Message Box, e non a gestire efficacemente un errore (che non c'è).

    in effetti hai perfettamente ragione mi sono incartato pensando fossero errori particolari e invece con una pulizia del codice (anche a mente) mi sono gestito tutto con “is nothing” tranquillamente.

    la funzione nel caso di errore si blocca qui.

    grazie per l'aiuto!

  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - eurostar_italia ha scritto:


    la funzione nel caso di errore si blocca qui.

    E' questo che vuol dire? E' una cosa nuova?

  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - eurostar_italia ha scritto:


    la funzione nel caso di errore si blocca qui.

    “Si blocca” in che senso? Se metti un breakpoint e vai in debug, il programma si ferma per forza: glielo stai dicendo tu.

    Non capisco poi il senso di aver una MessageBox seguita da una MsgBox… già una è fastidiosa per l'utente, che ormai col web è abituato ad altri feedback e alert realizzati in modo diverso, ma presentarne addirittura due in sequenza mi pare eccessivo, senza scendere nella trattazione di chissà quale complicato studio di UX…

    A meno che tu non l'abbia inserito ai fini di debugging: in quel caso, la Message Box è chiamata “il debug dei poveri”, come la funzione alert() di JavaScript, ovvero lo strumento a cui si fa ricorso in sicurezza per ottenere la descrizione dell'errore, perché non si sanno usare le funzionalità di debugging di Visual Studio, che come consiglio suggerisco di approfondire bene perché si tratta di una cosa essenziale da conoscere, come per un chirurgo è indispensabile che possa tenere in mano un bisturi.

    Insomma, a livello di codice e di sua strutturazione, ci sono molteplici fattori che fanno “storcere il naso”: capisco la necessità di puntare al sodo e tirare fuori la funzionalità, ma questo “debito tecnico” lo si paga poi in seguito, quando ci sono problematiche neanche particolari o il codice deve essere mantenuto, e lo si paga con gli interessi da strozzino. :)

  • Re: Gestione chiamata function [RISOLTO]

    09/11/2023 - Alka ha scritto:


    09/11/2023 - eurostar_italia ha scritto:


    la funzione nel caso di errore si blocca qui.

    “Si blocca” in che senso? Se metti un breakpoint e vai in debug, il programma si ferma per forza: glielo stai dicendo tu.

    Purtroppo mi sono spiegato male : la funzione va in errore da quel punto,l'ho bloccata con un breakpoint per fare uno screenshot decente.

    ho compreso pienamente le indicazioni che mi hai cortesemente dato.

    la doppia messagebox era una prova di errore dei poveri che tagliando il codice nelle prove è risultata cosi.l'utente vedrà solo quella “completa”.

    @oregon : no,nessun nuovo errore,per correttezza ho postato cosa mi ritorna la funziona in caso l'oggetto treno non venga trovato “il valore non può essere null".io stupidamente l'ho interpretato come un errore ma in realtà è un valore che è possibile che venga restituito (come mi avete suggerito righe sopra).

  • Re: Gestione chiamata function [RISOLTO]

    Fai una prova, dato che si sta capendo poco.

    Elimina temporaneamente try…catch dalla funzione e dicci esattamente in quale riga va in errore e con quale messaggio

Devi accedere o registrarti per scrivere nel forum
12 risposte