[C#] Gestione errori

sabato 17 aprile 2010 - 09.25

voyager18 Profilo | Junior Member

Ciao a tutti!! Sto sviluppando un'applicazione in C# con .NET 3.5. Ora quando sono in debug accade un fatto curioso. Quando si verifica un'eccezione non gestita con un blocco try-catch, l'applicazione non mi mostra nessun messaggio di errore. C'è un modo per far apparire un messaggio di errore come per esempio avviene nelle applicazioni ASP.NET? Che se un'eccezione non è gestita il server mi rimanda la pagina standard di errore di ASP.NET.

kataklisma Profilo | Senior Member

>Ciao a tutti!!
Ciao :)

>Sto sviluppando un'applicazione in C# con .NET
>3.5. Ora quando sono in debug accade un fatto curioso. Quando
>si verifica un'eccezione non gestita con un blocco try-catch,
>l'applicazione non mi mostra nessun messaggio di errore. C'è
>un modo per far apparire un messaggio di errore come per esempio
>avviene nelle applicazioni ASP.NET? Che se un'eccezione non è
>gestita il server mi rimanda la pagina standard di errore di
>ASP.NET.

La classe Exception intercetta qualsiasi eccezione :

try { ... ... } catch(Exception ex) { Messagebox.Show(ex.Message); }

Con il blocco scritto sopra puoi praticamente gestire qualsivoglia eccezione, se, per esempio, vuoi intercettare delle eccezioni di cui conosci la tipologia, tipo IOException, dovresti prima intercettare l'eccezione specifica, poi la generica (exception), prorpio per questo il blocco catch che intercetta "Exception" è sempre l'ultimo blocco catch.
Esempio :

try { ... ... } catch(IOException ioEx) { Messagebox.Show(ex.Message); } catch(Exception ex) { Messagebox.Show(ex.Message); }

In caso contrario il compilatore ti segnalerebbe l'hiding di IOException :

try { ... ... } catch(Exception ex) { Messagebox.Show(ex.Message); } catch(IOException ioEx) { Messagebox.Show(ioEx.Message); }


Quindi, morale della favole le eccezioni vanno gestite per ovviare a brutte situazioni a run-time ;)
La pagina di errore ASP.Net di cui parli è generata da eccezioni non gestite e non è un bel vedere!

Ciao! ;)
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

voyager18 Profilo | Junior Member

Si lo so che con la classe Exception posso intercettare qualsiasi eccezione. Il mio problema è un altro. Se un'eccezione si verifica dove io non ho messo un blocco try-catch c'è modo per far apparire il messaggio di errore standard del framework che avvisa che si è verificata un'eccezione non gestita?

kataklisma Profilo | Senior Member

>Si lo so che con la classe Exception posso intercettare qualsiasi
>eccezione. Il mio problema è un altro. Se un'eccezione si verifica
>dove io non ho messo un blocco try-catch c'è modo per far apparire
>il messaggio di errore standard del framework che avvisa che
>si è verificata un'eccezione non gestita?

Allora durante il debug, l'eccezione non gestita ti riporta nel compilatore, sull'operazione che ha generato l'errore dichiarando che l'eccezione "tipoEccezione" non è stata gestita.

In fase di runtime appare una specie di messagebox con lo stack trace dell'errore(forse è questo quello che ti interessa), quello che volevo farti capire prima e che questo genere di errori non devono assolutamente capitare, ecco perchè ti ho scritto quel mini/Micro tutorial sulle eccezioni .

Errori di quel genere in ambito software sono da evitare come la peste, quindi non devi trovare un workaround alla mancata gestione delle eccezioni, piuttosto fai una bella revisione di codice ;)

Ciao ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5