Oppure

Loading
23/10/11 10:38
Renny
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:
aaa
23/10/11 11:01
lorenzo
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 23/10/11 11:02
aaa
23/10/11 11:45
Renny
Ciao
Dunque, io ho il codice così:
 Try
    NewElemento = Elemento.Analizza(Tx.Text)
        Catch ex As ErroriSiglatura
            NewElemento= Nothing
            'gestione ERRORE -> mostrare ex.message su textbox
            Exit Sub
        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:

aaa
23/10/11 17:48
GN
Cos'è "ErroriSiglatura"? E' un oggetto derivato da Exception?
Il problema dovrebbe essere lì.
Ultima modifica effettuata da GN 23/10/11 17:49
aaa
23/10/11 20:46
Renny
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
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:
aaa
24/10/11 17:06
GN
Non so perchè, ma sono sempre più convinto che il problema sia nella classe ErroriSiglatura; prova a postarla.
aaa
24/10/11 22:30
Renny
Ciao.
Ok, la classe è questa:
Public Class ErroriSiglatura
        Inherits ApplicationException
        Public Sub New(ByVal Messaggio As String)
            MyBase.New("Attenzione! " & Messaggio)
        End Sub

        Public Sub New(ByVal Messaggio As String, ByVal str As String)
            MyBase.New(Messaggio & str)
        End Sub

        Public Sub New(ByVal NomeElemento As String, ByVal str As String, ByVal str2 As String)
            MyBase.New("L'elemento " & NomeElemento & " " & str & " è incompatibile con " & str2)
        End Sub
    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 24/10/11 22:34
aaa