Partager via


WindowsXamlManager.XamlShutdownCompletedOnThread Événement

Définition

Se produit lorsque le runtime XAML a terminé son processus d’arrêt sur le thread actif.

// Register
event_token XamlShutdownCompletedOnThread(TypedEventHandler<WindowsXamlManager, XamlShutdownCompletedOnThreadEventArgs const&> const& handler) const;

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

// Revoke with event_revoker
WindowsXamlManager::XamlShutdownCompletedOnThread_revoker XamlShutdownCompletedOnThread(auto_revoke_t, TypedEventHandler<WindowsXamlManager, XamlShutdownCompletedOnThreadEventArgs const&> const& handler) const;
public event TypedEventHandler<WindowsXamlManager,XamlShutdownCompletedOnThreadEventArgs> XamlShutdownCompletedOnThread;
function onXamlShutdownCompletedOnThread(eventArgs) { /* Your code */ }
windowsXamlManager.addEventListener("xamlshutdowncompletedonthread", onXamlShutdownCompletedOnThread);
windowsXamlManager.removeEventListener("xamlshutdowncompletedonthread", onXamlShutdownCompletedOnThread);
- or -
windowsXamlManager.onxamlshutdowncompletedonthread = onXamlShutdownCompletedOnThread;
Public Custom Event XamlShutdownCompletedOnThread As TypedEventHandler(Of WindowsXamlManager, XamlShutdownCompletedOnThreadEventArgs) 

Type d'événement

Exemples

Cet exemple montre comment vous pouvez vous abonner à l’événement pour propre vos objets lorsque XAML n’est plus en cours d’exécution sur le thread.

Dans cet exemple, vous avez différents types d’objets que vous souhaitez propre lorsque l’application s’arrête. XAML contient des références indirectes à certains de ces objets (par exemple, des objets « Model » comme dans une application Model-ViewModel), vous ne souhaitez donc pas les détruire tant que XAML n’a pas terminé son travail. Vous avez également des objets qui sont nettoyés dans un autre processus, et vous voulez également attendre ceux-ci.

Vous utilisez donc l’événement XamlShutdownCompletedOnThread et son report pour organiser le processus d’arrêt. Lorsque cet événement est déclenché, vous savez que xaml est terminé à l’aide de vos objets sur ce thread. Vous pouvez également prendre un report afin que l’arrêt ne se termine pas tant que vos opérations distantes ne sont pas terminées.

WindowsXamlManager manager = WindowsXamlManager::GetForCurrentThread();
manager.XamlShutdownCompletedOnThread([](
    const WindowsXamlManager& sender,
    const XamlShutdownCompletedOnThreadEventArgs& args) -> IAsyncAction
    {
        // Once we get this deferral, the DispatcherQueue shutdown process
        // won't continue until Complete is called.
        // Until we call deferral.Complete(), we can still use the 
        // DispatcherQueue and give it new work.
        auto deferral = args.GetDispatcherQueueDeferral();

        // Now that XAML has shutdown, we can clean up any of our objects
        // that XAML might have been using.
        CleanupUIThreadObjects();

        // Capture the UI thread context.
        winrt::apartment_context ui_thread;

        // We can also do cleanup work that might take a while. For example, 
        // we can wait for work in other processes to finish.
        co_await CleanupRemoteObjects();

        // Switch back to the UI thread, in case we have any UI-thread work left to do.
        // It will still be running because we took the deferral.
        co_await ui_thread;

        // Done! Shutdown may continue.
        deferral.Complete();
    });

Remarques

L’arrêt du runtime XAML est lié à la séquence d’arrêt du DispatcherQueue en cours d’exécution sur le thread. Pour plus d’informations, consultez la documentation DispatcherQueue.

Lorsqu’un DispatcherQueue sur un thread qui utilise XAML est arrêté, ces événements sont déclenchés dans l’ordre :

Au moment où l’événement WindowsXamlManager.XamlShutdownCompletedOnThread est déclenché :

  • XAML a déchargé tous les objets XAML actifs et déclenché l’événement Unloaded pour chaque objet.
  • XAML n’a plus d’état associé au thread actuel. WindowsXamlManager.GetForCurrentThread retourne null à ce stade.
  • DispatcherQueue sur le thread actuel est toujours disponible et utilisable. Il se trouve dans sa séquence d’arrêt. Notez donc que l’événement ShutdownStarting a déjà été déclenché et ne le sera pas à nouveau.

Notes

Même si vous appelez Close sur l’objet WindowsXamlManager ou relâchez toutes vos références à celui-ci, cet événement est toujours déclenché.

S’applique à