Pergunta

Quero obter a caixa de diálogo Formulários do Windows padrão, sempre que meu aplicativo C# encontra ue. Em vs 2005, quando desligei o JIT Debugging no app.conf como este:

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

O aplicativo se comporta corretamente e mostra a caixa de diálogo padrão do Windows UE, com continuar, desistir, ligar para pilha e tudo.

No entanto, no VS 2008, na mesma máquina ou diferente, mesmo que eu tenha diable jit, ainda recebo uma caixa de diálogo Padrão .NET UNKLEED-APECCECTION, com depuração, envie o relatório e não envie botões.

Como posso fazer meu aplicativo VS 2008 agir como o que eu faço no VS 2005, para mostrar a caixa de diálogo Windows Forms UE?

Por favor, não recomendo usar

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

Só porque não uso o Manipulador Custom no meu projeto VS 2005, por que eu usaria no VS 2008? Eu quero deixar este trabalho fazer clr.

Qualquer ajuda é apreciada

Foi útil?

Solução

Você está falando sobre diferentes recursos de manuseio de exceções. o ThreadExceptionDialog você vê com os botões desistir e continuar é desencadeado pelo Application.ThreadException Event. Só aparecerá se a exceção acontecer no thread da interface do usuário, quando um manipulador de eventos que é executado em resposta a uma mensagem do Windows lançar uma exceção. Qualquer exceção em um tópico de trabalhador, no entanto, bombardeá o programa através do appDomain.UnHandledException.

Você não pode lidar com o último, o programa está morto e não pode continuar. Exibir ThreadExceptionDialog é inútil.

Você pode fazer a bomba do programa consistentemente desativando o evento ThreadException chamando o Application.setUnHandledExceptionMode (). Agora, toda exceção não tratada acionará o appDomain.UnHandledException e encerrará o programa. Provavelmente não é isso que você quer, mas é a escolha sábia.

Observe também que o evento ThreadException está desativado quando você executa o programa com um depurador. É presumivelmente por isso que você vê uma diferença no VS2008. De outra forma, não houve nenhuma alteração.

Outras dicas

Resposta por Hans Passant parece sensato. No entanto, mesmo que você diga que não quer, eu ainda recomendo um manipulador ligado AppDomain.CurrentDomain.UnhandledException Para garantir que você determine o que acontece quando seu aplicativo trava inesperadamente.

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