Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Problema con Try & Catch
Forum - C# / VB.NET - [VB.NET] Problema con Try & Catch

Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 12:38
Domenica, 23/10/2011
Ciao Ragazzi..
Avrei un problemino con il gruppo di istruzioni di gestione delle eccezioni.
Nel mio programma, un parser per inserire delle stringhe codificate, uso un metodo factory per verificare e creare la stringa. Ho definito quindi le varie routine di controllo della stringa e definito una classe di eccezioni, che eredita da ApplicationException i metodi e una serie di "frasi" string, che descrivono l'errore. Tutto funziona, infatti il mio problema non riguarda il codice ma piuttosto VS10 Express. Non so che opzione ho impostato, ma quando si verifica un eccezione "gestita" il debugger ferma il programma e mi mostra il "messaggio" solito delle eccezioni, dicendomi di che eccezione si tratta (riporta il testo che ho predefinito io, come messaggio per l'eccezione avvenuta). Io vorrei che il debugger non si fermasse ma continuasse con l'esecuzione del programma, visto che l'eccezione è gestita...
Che opzione devo impostare? Dipende dal fatto che su MyProject ho messo "Option Strict" -> (so cosa vuol dire, niente conversioni implicite)
CHe mi dite?
ciao, grazie!:k:


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 13:01
Domenica, 23/10/2011
guarda che per "eccezione gestita" significa che deve esserci appunto un try -catch che intercetta la tua eccezione.
Se il debugger ti ferma l'esecuzione mandandoti quel messaggio significa che da qualche parte lanci l'eccezione ma non la gestisci.

Posta uno screenshot del messaggio del debugger e anche il codice....

Ultima modifica effettuata da lorenzo il 23/10/2011 alle 13:02


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 13:45
Domenica, 23/10/2011
Ciao
Dunque, io ho il codice così:
Codice sorgente - presumibilmente VB.NET

  1. Try
  2.     NewElemento = Elemento.Analizza(Tx.Text)
  3.         Catch ex As ErroriSiglatura
  4.             NewElemento= Nothing
  5.             'gestione ERRORE -> mostrare ex.message su textbox
  6.             Exit Sub
  7.         End Try


Elemento.Analizza è un metodo factory, passo la stringa, verifico la correttezza di quanto inserito e se ci sono errori uso throw Exception per esplicitare l'errore. Se tutto funzionasse, il flusso del programma dovrebbe spostarsi a catch ex, instanziare un oggetto ErroriInserimento, e poi uscire dalla sub.
Quello che succede invece è che il debugger mi mostra questo (vedi allegato). Se io faccio "Avanti |>", il programma poi va nel blocco di gestione Catch e tutto ok. Quello che vorrei evitare è l'interruzione come vedi nell'allegato.:nono:



Renny ha allegato un file: EsempioEx.JPG (40646 bytes)
Clicca qui per guardare l'immagine


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 19:48
Domenica, 23/10/2011
Cos'è "ErroriSiglatura"? E' un oggetto derivato da Exception?
Il problema dovrebbe essere lì.

Ultima modifica effettuata da GN il 23/10/2011 alle 19:49


PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 22:46
Domenica, 23/10/2011
Si, è la "mia classe" di eccezioni, che ho creato ereditando i metodi di ApplicationException.. Non è che ho aggiunto chissà che..
Come si intravede dall'immagine, nella classe factory faccio dei controlli e se la stringa non è conforme uso l'istruzione, ad esempio
Codice sorgente - presumibilmente C# / VB.NET

  1. Throw New ErroreSiglatura("descrizione dell'errore")


Per bloccare l'esecuzione del metodo factory, riportare il flusso del programma al Catch, segnalare l'errore all'utente e fermare l'applicazione...
La cosa che non capisco è che fino a un mese fa la gestione delle eccezioni era regolare e non appariva la finestra che ho messo in allegato (tranne il caso delle eccezioni non gestite).. Dopo non so, se ho cambiato io qualche impostazione (probabile) ma non riesco più a sistemare la cosa...:_doubt:


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 19:06
Lunedì, 24/10/2011
Non so perchè, ma sono sempre più convinto che il problema sia nella classe ErroriSiglatura; prova a postarla.


PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 0:30
Martedì, 25/10/2011
Ciao.
Ok, la classe è questa:
Codice sorgente - presumibilmente VB.NET

  1. Public Class ErroriSiglatura
  2.         Inherits ApplicationException
  3.         Public Sub New(ByVal Messaggio As String)
  4.             MyBase.New("Attenzione! " & Messaggio)
  5.         End Sub
  6.  
  7.         Public Sub New(ByVal Messaggio As String, ByVal str As String)
  8.             MyBase.New(Messaggio & str)
  9.         End Sub
  10.  
  11.         Public Sub New(ByVal NomeElemento As String, ByVal str As String, ByVal str2 As String)
  12.             MyBase.New("L'elemento " & NomeElemento & " " & str & " è incompatibile con " & str2)
  13.         End Sub
  14.     End Class


Come vedi sono solo 3 metodi New, per istanziare l'oggetto, che accettano un numero diverso di parametri.. E' un po stupido, perché basterebbe 1 metodo New che accetta 1 stringa, che concateno prima di creare il mio oggetto.
Comunque io sono sempre più convinto che si tratta di un'impostazione di VS10 Express.. Perché la classe l'ho create 4 mesi fa e da solo 2 mesi mi fa così.. Ho provato a togliere l'explici Strict ma non cambia.. Ragazzi.. datemi una mano.. vi prego!8-|



EDIT: Risolto.. Era un'opzione, che però non ricordo di aver modificato. Comunque nel menù debug, voce "eccezioni", avevo spuntato "interrompi quando un'eccezione" è GENERATA.. cioè creata da me. Ora esegue il blocco catch senza fermarsi.. :k:
Ciao, e grazie!

Ultima modifica effettuata da Renny il 25/10/2011 alle 0:34


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote