Domanda

Voglio ottenere predefinito di Windows Form non gestita-Eccezione di dialogo ogni volta che i miei incontri C # applicazione U-E. In VS 2005 quando spengo JIT debug in app.conf in questo modo:

<configuration>
   <system.windows.forms jitDebugging="false" />
<configuration>

i si comporta correttamente applicativi e spettacoli di Windows Form finestra predefinita U-E, con Continua, Quit, stack di chiamate e di tutti.

Tuttavia, in VS 2008, sulla stessa macchina o diversi, anche se ho JIT diable ho ancora predefinito .NET non gestita-Eccezione di dialogo, con il debug, pulsanti Invia rapporto e non inviare.

Come posso fare il mio VS 2008 app atto come quello che faccio in VS 2005, per mostrare Windows Form finestra U-E scatola?

Si prega di non consiglia di utilizzare

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

solo perché io non uso gestore personalizzato nel mio vs progetto del 2005, perché dovrei utilizzare in VS 2008? Voglio lasciare questo lavoro fare CLR.

Ogni aiuto è apprezzato

È stato utile?

Soluzione

Si sta parlando di diverse caratteristiche di gestione delle eccezioni. Il ThreadExceptionDialog che vedi con il Quit e continua pulsanti viene attivato dal evento Application.ThreadException . Sarà sempre e solo visualizzato se l'eccezione accade sul thread dell'interfaccia utente, quando un gestore di eventi che viene eseguito in risposta ad un messaggio di Windows genera un'eccezione. Ogni eccezione in un thread di lavoro tuttavia sarà bombardare il programma attraverso AppDomain.UnhandledException.

Non è in grado di gestire questi ultimi, il programma è morto e non può continuare. Visualizzazione ThreadExceptionDialog è inutile.

È possibile effettuare la bomba programma costantemente disabilitando l'evento ThreadException chiamando Application.SetUnhandledExceptionMode (). Ora ogni eccezione non gestita attiverà AppDomain.UnhandledException e terminare il programma. Questo non è probabilmente quello che si vuole, ma è la scelta saggia.

Si noti inoltre che l'evento ThreadException è disattivata quando si esegue il programma con un debugger. Il che è probabilmente il motivo per cui si vede una differenza in VS2008. Non ci sono stati cambiamenti altrimenti.

Altri suggerimenti

da Hans Passant sembra ragionevole. Tuttavia, anche se dici che non vuoi ho ancora consiglio un gestore su AppDomain.CurrentDomain.UnhandledException per essere sicuri di determinare che cosa succede quando l'applicazione si blocca improvvisamente.

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