Application.UnhandledException Evento
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 alla Windows Runtime. Il Windows Runtime attiverà quindi l'evento UnhandledException
per notificare all'app di questa eccezione.
La gestione delle eccezioni in un UnhandledException
oggetto è solo una di molte tecniche che possono essere usate sia per il debug che per la gestione delle eccezioni in fase di esecuzione e il possibile ripristino. Per altre informazioni sul set completo di tecniche che è possibile usare per il debug e la gestione degli errori, vedere Gestione delle eccezioni (Guida per programmatori C#).
Si noti che questo evento verrà generato solo quando non è più possibile che il codice dell'app possa rilevare un'eccezione. Si supponga, ad esempio, che un gestore eventi 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 rileva, l'eccezione verrà propagata attraverso il Windows Runtime di nuovo al livello esterno del codice dell'app, che viene data la possibilità di intercettarlo. L'evento UnhandledException
viene attivato solo quando non ci sono più opportunità per il codice dell'app di rilevare un'eccezione tramite la normale propagazione.
È anche possibile generare un'eccezione e non avere mai la possibilità di essere rilevati dal codice dell'app. Ad esempio, se il framework XAML esegue il layout e viene generata un'eccezione, questa eccezione non verrà propagata tramite alcun codice dell'app. In questo caso, l'evento UnhandledException
viene generato e questo sarà la prima volta che qualsiasi codice dell'app riceve una notifica sull'eccezione.
Normalmente dopo che l'evento viene attivato, il UnhandledException
Windows Runtime termina l'app perché l'eccezione non è stata gestita. Il codice dell'app ha un controllo su questo: se il gestore eventi imposta la proprietà Handled degli argomenti dell'evento su true
, nella maggior parte dei casi l'app UnhandledException
non verrà terminata. Tuttavia, questa operazione non è consigliata in modo routine per diversi motivi:
- In genere il
UnhandledException
gestore eventi non dispone di informazioni sufficienti per sapere se continuare dopo un'eccezione è sicura. Parti del codice dell'applicazione o della Windows Runtime possono essere in uno stato incoerente, che potrebbero causare errori successivi se l'app continua a eseguire il codice. - Il Windows Runtime considera le eccezioni rilevate durante determinate operazioni come non recuperabili, perché il Windows Runtime stesso sarà in uno stato incoerente seguendo queste eccezioni. Per tali eccezioni, anche se il
UnhandledException
gestore eventi imposta Handled sutrue
, l'app verrà comunque terminata. - Gli errori che si verificano durante lo spostamento potrebbero causare uno stato in cui non è stato caricato alcun contenuto e nulla per indicare all'utente che l'app è ancora in esecuzione.
- Per altre informazioni su questi punti, vedere Gestione delle eccezioni (Guida per programmatori C#).
Una limitazione notevole è che gli UnhandledException
argomenti dell'evento non contengono il più dettaglio dell'eccezione originale come propagato dal codice dell'app. Ogni volta che è possibile, se l'app richiede un'elaborazione specifica di un'eccezione, è sempre meglio rilevare l'eccezione durante la propagazione, perché saranno disponibili altri dettagli. Gli UnhandledException
argomenti dell'evento espongono un oggetto eccezione tramite la proprietà Exception. Tuttavia, il tipo, il messaggio e la traccia dello stack di questo oggetto eccezione non sono garantiti per corrispondere 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 originariamente.
Non è possibile 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.