Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
WinForms e gestione degli errori
venerdì 04 settembre 2009 - 11.14
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
ven 4 set 2009 - 11:14
Ciao a tutti,
sviluppo abitualmente su ASP.NET, sulle windows forms sono ancora alle prime armi.
Volevo implementare una gestione personalizzata degli errori, qualcosa di simile a quanto
si ottiene lato web con l'evento Application_Error del global.vb e il tag <customErrors />
del web.config.
Pensavo di creare un form personalizzato da far aprire nel caso di exception non gestite.
E' la strada giusta? C'è qualcosa di simile all'Application_Error per poter gestire questo
comportamento?
Grazie per l'attenzione,
Davide
tonyexpo
Profilo
| Senior Member
229
messaggi | Data Invio:
ven 4 set 2009 - 16:58
Ciao
bella la tua domanda.... ;) in effetti se ne parla poco...
allora: per gestire un errore "non gestito" in genere (console,servizi,dll....) puoi usare l'evento UnhandledException della classe AppDomain.
es: AppDomain.CurrentDomain.UnhandledException += ................. (in vb usi addhandler)
in winforms, usi invece l'evento Application.ThreadException
PS: quando sei in debug il debugger appunto si blocca comunque sull'eccezione.
eseguendo senza debug invece catturi correttamente l'errore.
comunque, se ti interessa l'argomento e vuoi approfondire, è descritto bene nell'msdn alla voce unhandledexception dell'appdomain.
ciaooooooo
Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
sab 5 set 2009 - 12:34
Ciao Antonio, grazie.
Allora si può fare una cosa del genere ...
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
AddHandler Application.ThreadException, AddressOf CustomErrorHandler
Private Sub CustomErrorHandler(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
' MIA GESTIONE DELL'ERRORE
' ..................................
End Sub
Fin qui tutto ok.
Dal momento però che sono in un progetto Windows Forms, dove va aggiunto questo codice?
Qui, credo, non ho una Sub Main() dove poterlo inserire. Ho provato a metterlo nel New del
form di avvio, ma mi restituisce l'errore "Una volta creati controlli nel thread, non è possibile
modificare la modalità eccezioni del thread".
Qualche idea?
Davide
tonyexpo
Profilo
| Senior Member
229
messaggi | Data Invio:
sab 5 set 2009 - 17:32
>Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
ti va in eccezione solo questo rigo che poi è inutile perchè è esattamente l'opzione che già hai.
in alternativa potresti disattivarlo mettendo UnhandledExceptionmode.ThrowException, in quel caso dovresti catchare gli errori nell'apppool.unhandledexception anche in windows forms, ma appunto come da errore che ricevi devi farlo prima di avviare l'oggetto application.
ti spiego: quando un applicazione winform si avvia è il form a fare da oggetto di avvio. (il tuo caso)
in alternativa, per avere più controllo, puoi avviare l'applicazione da un metodo Main() come per consoleapplication, e da li fare application.Start(il tuo form di avvio)....
prima di questo start, dovresti mettere il tuo codice di sopra.
ps: comunque va bene metterlo nel costruttore del form di avvio, poi varrà per tutto il thread e quindi anche gli altri form
bye
Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
dom 6 set 2009 - 12:23
1141_formErrore.zip
Perfetto
Ho risolto con poche righe di codice nel form principale / di avvio e creando poi
un form ad hoc per la visualizzazione dell'errore.
Public Class frmAvvio
Private Shared Sub CustomErrorHandler(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
Using obj As New frmError
obj.Exception = e.Exception
obj.ShowDialog()
End Using
End Sub
Private Sub frmAvvio_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler Application.ThreadException, AddressOf CustomErrorHandler
' ...........
' ............
End Sub
End Class
In allegato trovi un immagine del risultato.
Ciao!
Torna su
Stanze Forum
Elenco Threads
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 !