Domanda

Se si genera un'eccezione all'interno di una finestra di dialogo MFC, l'app si blocca, anche se nel codice è presente un blocco catch. Rifiuta di rispondere al mouse o alla tastiera e l'unico modo per spegnerlo è utilizzare Task Manager.

Perché sto pubblicando questa domanda

Per mia vergogna, esiste una popolare applicazione termoretraibile che si blocca ogni volta che incontra un errore eccezionale in una finestra di dialogo modale. Quando abbiamo fatto un enorme passaggio dai codici di errore interi alle eccezioni, ero responsabile della scelta di std :: exception come classe di base per le eccezioni generate. Non è stato fino a quando un'enorme quantità di lavoro è andato nella conversione che i nostri test hanno scoperto questo problema, e ormai era troppo tardi per cambiare. Spero che questa domanda / risposta impedisca a qualcuno di commettere lo stesso errore.

È stato utile?

Soluzione

Il codice per CDialog :: DoModal rende modale la finestra di dialogo disabilitando la finestra padre. Quando il codice della finestra di dialogo ritorna, la finestra viene riattivata. C'è una cattura esplicita per gli errori CException *, ma non per qualsiasi altro tipo di eccezione generata; pertanto la finestra padre non viene mai riattivata.

Cambia il tuo codice per lanciare un puntatore a qualsiasi eccezione derivata da CException e risolverai il problema.

Altri suggerimenti

Se sei interessato a sapere come Windows rileva gli apphangs, abbiamo aggiunto alcuni post a questo sul blog di Segnalazione errori di Windows:

Let there be hangs part 1 of 4

Let there be hangs parte 2 di 4

Let there be hangs parte 3 di 4

Let there be hangs parte 4 di 4

È importante notare che queste informazioni quando inviate tramite la Segnalazione errori di Windows di Microsoft vengono comunicate agli sviluppatori software per provare a risolvere questi problemi. Se invii segnalazioni di errori, contribuirai a risolvere i problemi che si verificano sul tuo PC!

Sono un Program Manager di Microsoft nel team di segnalazione errori di Windows.

La risposta di Mark è corretta. Per un'analisi molto più rigorosa di questo problema e un suggerimento dettagliato per affrontarlo nel tuo codice, vedi FAQ di Doug Harrison (in particolare la sezione Q6).

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