È possibile provare / catturare l'intero programma C #?
-
05-07-2019 - |
Domanda
Un programma C # è invocato da:
Application.Run (new formClass ());
Mi piacerebbe fare un tentativo per catturare tutte le eccezioni non rilevate. Quando lo metto in giro con questo metodo Run, le eccezioni non vengono rilevate; Il controllo ritorna qui solo quando il programma termina dopo un'eccezione non rilevata.
Dove posso mettere try / catch per coprire l'intero programma? Grazie!
Soluzione
Per rilevare le eccezioni non gestite di Windows Form, collegare il
AppDomain.UnhandledException
e Application.ThreadException
eventi.
Di interesse: Errori imprevisti nelle applicazioni gestite
Altri suggerimenti
Fondamentalmente, non è possibile rilevare tutte le eccezioni quando si utilizza il processo di hosting CLR predefinito. Periodo. Questo perché AppDomain.UnhandledException
è solo una notifica, non è possibile gestire l'eccezione (il che significa che non è possibile impedire la chiusura dell'applicazione dopo l'elaborazione della notifica).
Tuttavia, è possibile rilevare e gestire tutte le eccezioni nel thread dell'interfaccia utente di un'applicazione WinForms utilizzando Application.ThreadException
gestore (e controlla il comportamento tramite UnhandledExceptionMode
). Altri thread che generano un'eccezione non verranno catturati da questo gestore.
In generale, non è una buona idea provare a gestire tutte le eccezioni. È possibile, tuttavia, utilizzare il
AppDomain.UnhandledException
per registrare l'errore e / o eseguire importanti attività di pulizia (ad es. chiusura di un database basato su file o altro).