Ultima modifica da un moderatore:
Anche il programmatore più niubbo sa quanto importante sia intercettare e gestire gli errori. Il Net offre un'ottima gestione grazie al Try Catch Finally, ma può capitare che scriviamo codice che non rientra in un Try o in altri tipi di error handler (on error...), oppure puo' essere che l'applicazione va in errore in punti dove non è proprio possibile gestire l'errore e cosi' l'applicazione crasha.
C'è un modo per intercettare in ogni caso qualsiasi errore venga generato, ora vi spieghero'.
La tecnica è definita Global Handle Exception, inutile discutere sulla estreama comodità e professionalità che ne deriva.
Prima che l'applicazione venga chiusa a causa dell'eccezione possiamo crearce file di log o altre operazioni, e prevedere un form dove chiede di inviarci le informazioni dell'errore cosi' da monitorare le nostre applicazioni e raffinarle.
in VBNET andate in proprietà del progetto (non della soluzione, del progetto!)
nella parte bassa a destra c'è il tasto [Visualizza eventi applicazione], premetelo.
ed incollate dentro questo codice di esempio:
in questo caso quando eventualmente si verifica una eccezione non gestita invece di crashare e apparire la fastidiosa finestra del net (che mostra pure parte del codice), verra' mostrato un messaggio.
Ovviamente invece del messaggio potete fare il show di un form che chiede o meno di inviare i dati al programmatore, magari richiamando una pagina web che vi scrivera' il log sul server o inviando una email.
ATTENZIONE: il global handle verrà generato solo quando lanciate l'eseguibile, se runnate dentro il Visual Studio, ovviamente il debugger vi segnalera' l'eventuale eccezione escludendo il Global Handle Eception.
Per testarlo potete generare una eccezione qualsiasi per esempio un numero diviso per zero.
- - - Updated - - -
UPDATE: in C# è un pelino meno comodo ma basta aggiungere a mano l'handle nella Sub Main, la STAThread per capirci
e questo il codice
E con questo ho concluso
Predator
C'è un modo per intercettare in ogni caso qualsiasi errore venga generato, ora vi spieghero'.
La tecnica è definita Global Handle Exception, inutile discutere sulla estreama comodità e professionalità che ne deriva.
Prima che l'applicazione venga chiusa a causa dell'eccezione possiamo crearce file di log o altre operazioni, e prevedere un form dove chiede di inviarci le informazioni dell'errore cosi' da monitorare le nostre applicazioni e raffinarle.
in VBNET andate in proprietà del progetto (non della soluzione, del progetto!)
nella parte bassa a destra c'è il tasto [Visualizza eventi applicazione], premetelo.
ed incollate dentro questo codice di esempio:
Codice:
Namespace My
Partial Friend Class MyApplication
Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
IO.File.AppendAllText("err_" & Now.Ticks & ".txt", DateTime.Now & vbCrLf & e.Exception.ToString & vbCrLf & "======================================================")
MsgBox("Errore Imprevisto contattare l'assistenza" & vbCrLf & "Premere OK")
End Sub
End Class
End Namespace
Ovviamente invece del messaggio potete fare il show di un form che chiede o meno di inviare i dati al programmatore, magari richiamando una pagina web che vi scrivera' il log sul server o inviando una email.
ATTENZIONE: il global handle verrà generato solo quando lanciate l'eseguibile, se runnate dentro il Visual Studio, ovviamente il debugger vi segnalera' l'eventuale eccezione escludendo il Global Handle Eception.
Per testarlo potete generare una eccezione qualsiasi per esempio un numero diviso per zero.
- - - Updated - - -
UPDATE: in C# è un pelino meno comodo ma basta aggiungere a mano l'handle nella Sub Main, la STAThread per capirci
Codice:
Application.ThreadException += new ThreadExceptionEventHandler(form1.UnhandledThreadExceptionHandler);
Codice:
public void UnhandledThreadExceptionHandler(object sender, ThreadExceptionEventArgs e) {
this.HandleUnhandledException(e.Exception);
}
public void HandleUnhandledException(Exception e) {
MessageBox.Show("Si è verificato un errore");
Application.Exit();
}
}
Predator