Condividi tramite


Application.UnhandledException Evento

Definizione

Si verifica quando un'eccezione può essere gestita dal codice dell'app, come inoltrato da un errore di Windows Runtime a livello nativo. Le app possono contrassegnare l'occorrenza come gestita nei dati dell'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 evento

Commenti

L'evento UnhandledException viene usato per notificare all'app le eccezioni rilevate dal framework XAML o dal Windows Runtime in generale che non sono state gestite dal codice dell'app.

Ad esempio, se il Windows Runtime richiama il codice dell'app come un gestore eventi e il codice dell'app genera un'eccezione e non lo rileva, l'eccezione verrà propagata nuovamente al Windows Runtime. Il Windows Runtime genererà quindi l'evento UnhandledException per notificare all'app questa eccezione.

La gestione delle eccezioni in un'eccezione UnhandledException è solo una delle numerose tecniche che possono essere usate sia per il debug che per la gestione delle eccezioni in fase di esecuzione e per il ripristino possibile. Per altre informazioni sul set completo di tecniche che è possibile usare per il debug e la gestione degli errori, vedere Gestione delle eccezioni per in C# o Visual Basic.

Si noti che questo evento verrà generato solo quando non è più possibile che il codice dell'app possa intercettare un'eccezione. Si supponga, ad esempio, che un gestore eventi dell'app chiami un'API Windows Runtime che a sua volta richiama un callback. Se il codice interno dell'app genera un'eccezione e non lo intercetta, l'eccezione verrà propagata attraverso il Windows Runtime al livello esterno del codice dell'app, che ha la possibilità di intercettarlo. L'evento UnhandledException viene generato solo quando non vi sono più opportunità per il codice dell'app di intercettare un'eccezione tramite la propagazione normale.

È anche possibile che venga generata un'eccezione e non abbia mai la possibilità di essere intercettata dal codice dell'app. Ad esempio, se il framework XAML esegue il layout e viene generata un'eccezione, questa eccezione non verrà propagata tramite codice dell'app. In questo caso, viene generato l'evento UnhandledException e questa sarà la prima volta che un codice dell'app riceve una notifica sull'eccezione.

In genere dopo l'evento UnhandledException, il Windows Runtime termina l'app perché l'eccezione non è stata gestita. Il codice dell'app ha un certo controllo su questo: se il gestore eventi UnhandledException imposta la proprietà Handled degli argomenti dell'evento su true, nella maggior parte dei casi l'app non verrà terminata. Tuttavia, questa operazione di routine non è consigliata per diversi motivi:

  • In genere il gestore eventi UnhandledException non dispone di informazioni sufficienti per sapere se continuare dopo un'eccezione è sicura. Parti del codice dell'applicazione o del Windows Runtime potrebbero trovarsi in uno stato incoerente, che potrebbe causare errori successivi se l'app continua a eseguire il codice.
  • Il Windows Runtime considera le eccezioni rilevate durante determinate operazioni come irreversibili, perché il Windows Runtime stesso sarà in uno stato incoerente dopo queste eccezioni. Per tali eccezioni, anche se il gestore eventi UnhandledException imposta Handled su true, l'app verrà comunque terminata.
  • Gli errori che si verificano durante lo spostamento potrebbero causare uno stato in cui non è stato caricato nulla come contenuto e nulla per indicare all'utente che l'app è ancora in esecuzione.
  • Per altre info su questi punti, vedi Gestione delle eccezioni per in C# o Visual Basic.

Una limitazione rilevante è che gli argomenti dell'evento UnhandledException non contengono il maggior numero di dettaglio dell'eccezione originale propagata dal codice dell'app. Quando possibile, se l'app richiede un'elaborazione specifica di una determinata eccezione, è sempre preferibile intercettare l'eccezione durante la propagazione, perché saranno disponibili altri dettagli. Gli argomenti dell'evento UnhandledException espongono un oggetto eccezione tramite la proprietà Exception . Tuttavia, il tipo, il messaggio e l'analisi dello stack di questo oggetto eccezione non corrispondono a quelli dell'eccezione originale generata. Gli argomenti dell'evento espongono una proprietà Message . Nella maggior parte dei casi, questo conterrà il messaggio dell'eccezione generata in origine.

Non puoi collegare i gestori per UnhandledException in XAML (nell'elemento Application in App.xaml). È necessario collegare gestori per UnhandledException nell'oggetto Application nel codice, nel costruttore o nella logica di attivazione.

Per le app Windows 8.1, le eccezioni dalle chiamate al metodo asincrono possono essere propagate come evento UnhandledException. Sono incluse le implementazioni dei metodi asincroni (gestori di attivazione e così via).

Si applica a

Vedi anche