Compartilhar via


Application.UnhandledException Evento

Definição

Ocorre quando uma exceção pode ser tratada pelo código do aplicativo, conforme encaminhado de um erro de Windows Runtime de nível nativo. Os aplicativos podem marcar a ocorrência como manipulada em dados de evento.

public:
 virtual event UnhandledExceptionEventHandler ^ UnhandledException;
// Register
event_token UnhandledException(UnhandledExceptionEventHandler const& handler) const;

// Revoke with event_token
void UnhandledException(event_token const* cookie) const;

// Revoke with event_revoker
Application::UnhandledException_revoker UnhandledException(auto_revoke_t, UnhandledExceptionEventHandler const& handler) const;
public event UnhandledExceptionEventHandler UnhandledException;
function onUnhandledException(eventArgs) { /* Your code */ }
application.addEventListener("unhandledexception", onUnhandledException);
application.removeEventListener("unhandledexception", onUnhandledException);
- or -
application.onunhandledexception = onUnhandledException;
Public Custom Event UnhandledException As UnhandledExceptionEventHandler 

Tipo de evento

Comentários

O evento UnhandledException é usado para notificar o aplicativo sobre exceções encontradas pela estrutura XAML ou pelo Windows Runtime em geral que não foram tratadas pelo código do aplicativo.

Por exemplo, se o Windows Runtime invocar o código do aplicativo como um manipulador de eventos e o código do aplicativo gerar uma exceção e não a capturar, a exceção será propagada de volta para o Windows Runtime. Em seguida, o Windows Runtime disparará o evento UnhandledException para notificar o aplicativo sobre essa exceção.

Lidar com exceções em um UnhandledException é apenas uma das muitas técnicas que podem ser usadas tanto para depuração quanto para tratamento de exceção em tempo de execução e possível recuperação. Para obter mais informações sobre o conjunto completo de técnicas que você pode usar para depuração e tratamento de erros, consulte Tratamento de exceção para em C# ou Visual Basic.

Observe que esse evento só será acionado quando não houver mais nenhuma possibilidade de que o código do aplicativo possa capturar uma exceção. Por exemplo, imagine que um manipulador de eventos de aplicativo chama uma API Windows Runtime que, por sua vez, invoca um retorno de chamada. Se o código interno do aplicativo gerar uma exceção e não a capturar, a exceção será propagada pela Windows Runtime de volta para a camada externa do código do aplicativo, que terá a chance de pegá-la. O evento UnhandledException é acionado somente quando não há mais oportunidades para o código do aplicativo capturar uma exceção por meio da propagação normal.

Também é possível que uma exceção seja lançada e nunca tenha nenhuma chance de ser capturada pelo código do aplicativo. Por exemplo, se a estrutura XAML estiver executando o layout e uma exceção for lançada, essa exceção não será propagada por meio de nenhum código de aplicativo. Nesse caso, o evento UnhandledException é acionado e essa será a primeira vez que qualquer código de aplicativo é notificado sobre a exceção.

Normalmente, depois que o evento UnhandledException é acionado, o Windows Runtime encerra o aplicativo porque a exceção foi sem tratamento. O código do aplicativo tem algum controle sobre isso: se o manipulador de eventos UnhandledException definir a propriedade Handled dos argumentos de evento como true, na maioria dos casos o aplicativo não será encerrado. No entanto, fazer isso rotineiramente não é recomendado por vários motivos:

  • Normalmente, o manipulador de eventos UnhandledException não tem informações suficientes para saber se continuar depois que uma exceção é segura. Partes do código do aplicativo ou do Windows Runtime podem estar em um estado inconsistente, o que pode resultar em falhas subsequentes se o aplicativo continuar executando seu código.
  • O Windows Runtime considera as exceções encontradas durante determinadas operações como não detectáveis, pois a própria Windows Runtime estará em um estado inconsistente após essas exceções. Para essas exceções, mesmo que o manipulador de eventos UnhandledException defina Handled como true, o aplicativo ainda será encerrado.
  • Erros que ocorrem durante a navegação podem causar um estado em que não há nada carregado como conteúdo e nada que indique ao usuário que o aplicativo ainda está em execução.
  • Para obter mais informações sobre esses pontos, consulte Tratamento de exceção para em C# ou Visual Basic.

Uma limitação notável é que os argumentos de evento UnhandledException não contêm tantos detalhes quanto a exceção original propagada do código do aplicativo. Sempre que possível, se o aplicativo exigir um processamento específico de uma determinada exceção, será sempre melhor capturar a exceção conforme ela se propaga, pois mais detalhes estarão disponíveis em seguida. Os argumentos de evento UnhandledException expõem um objeto de exceção por meio da propriedade Exception . No entanto, o tipo, a mensagem e o rastreamento de pilha desse objeto de exceção não são garantidos para corresponder aos da exceção original que foi gerada. Os argumentos de evento expõem uma propriedade Message . Na maioria dos casos, isso conterá a mensagem da exceção gerada originalmente.

Não é possível conectar manipuladores para UnhandledException em XAML (no elemento Application em App.xaml). Você deve anexar manipuladores para UnhandledException no objeto Application no código, seja no construtor ou na lógica de ativação.

Para aplicativos Windows 8.1, exceções de chamadas de método assíncrono podem se propagar como um evento UnhandledException. Isso inclui suas próprias implementações de método assíncrono (manipuladores de ativação e assim por diante).

Aplica-se a

Confira também