Imansible acquisire le eccezioni non gestite in Winforms

Sto cercando di catturare tutte le eccezioni non gestite in un’applicazione Windows Form C #. Ho aggiunto il seguente codice al file Program.cs ma le eccezioni non vengono acquisite, ottengo eccezioni come NullReferenceException . Che cosa sto facendo di sbagliato?

 static void Main() { System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnGuiUnhandedException); AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; var form = new MainForm(); form.ShowDialog(); } private static void HandleUnhandledException(Object o) { // TODO: Log it! Exception e = o as Exception; if (e != null) { } } private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e) { HandleUnhandledException(e.ExceptionObject); } private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e) { HandleUnhandledException(e.Exception); } 

EDIT: Sono in grado di catturare le eccezioni quando il programma viene eseguito esternamente all’esterno di Visual Studio, ma quando eseguo il debug da Visual Studio non riesco a catturare Exception. So che il debug è per la rimozione degli errori. Devo eseguire il programma in modalità Build per catturare le eccezioni ?

Prova a distriggersre l’intercettazione di eccezioni in VS, poiché sembra catturare l’eccezione prima che arrivi ai tuoi gestori.

Debug> Eccezioni …> Deseleziona User-unhandled per Common Language Runtime Exceptions.

Se si utilizza Windows a 64 bit, è ansible controllare Debug-> Eccezioni e verificare che vengano generate eccezioni CLR.

Fallimenti silenziosi in C #, eccezioni apparentemente non gestite che non bloccano il programma

Gli eventi a cui ti stai iscrivendo forniscono solo un mezzo per ispezionare l’eccezione; non hanno lo scopo di permetterti di sopprimere o recuperare dall’eccezione.

Da AppDomain.UnhandledException :

Questo evento fornisce la notifica delle eccezioni non rilevate. Consente all’applicazione di registrare le informazioni sull’eccezione prima che il gestore predefinito del sistema segnali l’eccezione all’utente e chiuda l’applicazione.

Se si desidera recuperare dalle eccezioni dopo averli registrati, sarà necessario utilizzare blocchi try-catch attorno al codice.