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!

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top