Pregunta

Si lanza una excepción desde dentro de un cuadro de diálogo de MFC, la aplicación se bloquea, incluso si tiene un bloque catch en su código. Se niega a responder al mouse o al teclado, y la única forma de apagarlo es usar el Administrador de tareas.

Por qué publico esta pregunta

Para mi vergüenza, hay una aplicación popular que se bloquea cada vez que encuentra un error excepcional en un diálogo modal. Cuando hicimos un cambio masivo de códigos de error de enteros a excepciones, fui responsable de elegir std :: exception como la clase base para las excepciones lanzadas. No fue hasta una gran cantidad de trabajo en la conversión que nuestras pruebas descubrieron este problema, y ??para entonces ya era demasiado tarde para cambiar. Con suerte, esta pregunta / respuesta evitará que alguien cometa el mismo error.

¿Fue útil?

Solución

El código de CDialog :: DoModal hace que el diálogo sea modal al deshabilitar la ventana principal. Cuando el código de diálogo vuelve, la ventana se vuelve a habilitar. Existe una captura explícita para los errores de CException *, pero no para ningún otro tipo de excepción lanzada; por lo tanto, la ventana principal nunca se vuelve a habilitar.

Cambie su código para lanzar un puntero a cualquier excepción derivada de CException, y solucionará el problema.

Otros consejos

Si está interesado en saber cómo detecta Windows los fenómenos, hemos agregado algunas publicaciones a esto en el blog Informe de errores de Windows:

Que se cuelgue la parte 1 de 4

Deje que se cuelgue la parte 2 de 4

Deje que se cuelgue la parte 3 de 4

Deje que se cuelgue la parte 4 de 4

Es importante tener en cuenta que esta información cuando se envía a través del Informe de errores de Windows de Microsoft se comunica a los desarrolladores de software para tratar de solucionar estos problemas. ¡Si está enviando sus informes de errores, ayudará a solucionar los problemas que están ocurriendo en su PC!

Soy un administrador de programas en Microsoft en el equipo de informes de errores de Windows.

La respuesta de Mark es correcta. Para un análisis mucho más riguroso de este problema y una sugerencia detallada para resolverlo en su propio código, vea esto Preguntas frecuentes de Doug Harrison (sección Q6 en particular).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top