Ho letto in this post che per evitare la finestra di dialogo "il programma ha smesso di funzionare", devo rilevare l'eccezione non gestita dall'AppDomain.Eccezione non gestita, mostra ancora la finestra di dialogo "programma interrotto"
public Form1()
{
///Code
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
///more code
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var excep = e.ExceptionObject;
//Writing the exception to log file with the stack flow
Logger.Logger.LogException("UNHANDLED EXCEPTION:"+Environment.NewLine +excep.ToString(), this);
//Terminate the logger (manual event waiting for file write to finish)
Logger.Logger.Terminate();
Environment.Exit(1);
}
Ma quando ottengo l'eccezione inalata. Posso vederlo scritto sul registro, ma l'applicazione mostra la finestra di dialogo "il programma ha smesso di funzionare". può essere causato dalla linea Logger.Terminate
? (di nuovo - il comando di terminazione attende fino a quando tutti i registri sono stati scritti nel file di registro)
È possibile che anche il gestore eventi si blocchi. Quel metodo Terminate() sembra piuttosto rischioso. Anche Environment.Exit() può fallire, esegue ancora i finalizzatori. O qualcosa di stupido come un bug nella classe Logger, non migliorerà quando lo utilizzerai nel gestore di eventi. In generale, qualcosa di brutto è accaduto nel tuo programma, quindi le probabilità che possa destabilizzare il tuo gestore di eventi non sono mai pari a zero. Sei anche abbastanza in ritardo nell'iscriverti, dovrebbe essere fatto nel metodo Main() prima di fare qualsiasi altra cosa. –
È anche possibile che il gestore eventi non venga mai chiamato. Alcune eccezioni ('StackOverflowException') possono eliminare l'intero processo prima che qualsiasi gestore abbia la possibilità di eseguirlo. – hvd
Ragazzi- Vedo l'eccezione non gestibile nel file di registro e anche la finalizzazione del file di registro. quindi questo evento viene elaborato. Inoltre ho nel main lo stesso evento catch sull'eccezione di Thread (grazie!) – Izikon