Pergunta

Se você lançar uma exceção de dentro de uma caixa de diálogo MFC, os trava app, mesmo se você tiver um bloco catch em seu código. Ele se recusa a responder ao mouse ou teclado, e a única maneira de desligá-lo é usar o Gerenciador de Tarefas.

Por que eu estou postando esta pergunta

Para minha vergonha, não é uma aplicação retráctil popular que trava cada vez que encontra um erro excepcional em um diálogo modal. Quando fizemos uma grande mudança a partir de códigos de erro inteiro para exceções, eu era responsável por escolher std :: exceção como a classe base para as exceções lançadas. Não foi até uma enorme quantidade de trabalho foi para a conversão que nossos testes descobriram este problema, e aí já era tarde demais para mudar. Esperemos que esta pergunta / resposta vai manter alguém de cometer o mesmo erro.

Foi útil?

Solução

O código para CDialog :: DoModal faz com que a caixa de diálogo modal, desativando a janela pai. Quando o diálogo retorna código, a janela é reativada. Há uma captura explícita para CException * erros, mas não para qualquer outro tipo de exceção lançada; assim, a janela pai nunca é reativado.

Alterar o seu código para lançar um ponteiro para qualquer exceção derivada de CException, e você vai resolver o problema.

Outras dicas

Se você estiver interessado em aprender sobre como o Windows detecta apphangs temos acrescentado alguns posts a esta no blog Relatório de Erros do Windows:

Faça-se a trava parte 1 de 4

Faça-se a trava parte 2 de 4

Faça-se a trava parte 3 de 4

Faça-se a trava parte 4 de 4

importante a notar é que esta informação quando enviada através de relatório de erros da Microsoft Windows é comunicado para os desenvolvedores de software para tentar corrigir esses problemas. Se você está enviando em seus relatórios de erro que você vai ajudar questões correção que estão ocorrendo no seu PC!

Eu sou um gerente de programa da Microsoft na equipe Relatório de Erros do Windows.

A resposta de Mark está correto. Para uma análise muito mais rigorosa do problema e uma sugestão detalhada para lidar com ele em seu próprio código, consulte este FAQ por Doug Harrison (seção Q6 em particular).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top