Freigeben über


WindowsXamlManager.XamlShutdownCompletedOnThread Ereignis

Definition

Tritt auf, wenn die XAML-Runtime ihren Herunterfahrensprozess für den aktuellen Thread abgeschlossen hat.

// 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) 

Ereignistyp

Beispiele

In diesem Beispiel wird veranschaulicht, wie Sie das Ereignis abonnieren können, um Ihre Objekte zu sauber, wenn XAML nicht mehr im Thread ausgeführt wird.

In diesem Beispiel haben Sie einige verschiedene Arten von Objekten, die Sie beim Herunterfahren der App sauber möchten. XAML weist einige indirekte Verweise auf einige dieser Objekte auf (z. B. "Model"-Objekte wie in einer Model-ViewModel-App), sodass Sie diese erst zerstören möchten, wenn XAML mit seiner Arbeit abgeschlossen ist. Sie haben auch einige Objekte, die in einem anderen Prozess bereinigt werden, und Sie möchten auch auf diese warten.

Daher verwenden Sie das XamlShutdownCompletedOnThread-Ereignis und dessen Zurückstellung, um den Herunterfahrensprozess zu organisieren. Wenn dieses Ereignis ausgelöst wird, wissen Sie, dass XAML mit Ihren -Objekten in diesem Thread ausgeführt wird. Sie können auch eine Verzögerung durchführen, damit das Herunterfahren erst abgeschlossen wird, wenn Ihre Remotevorgänge abgeschlossen sind.

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();
    });

Hinweise

Das Herunterfahren der XAML-Runtime ist an die Herunterfahrenssequenz der DispatcherQueue gebunden, die im Thread ausgeführt wird. Weitere Informationen finden Sie in der DispatcherQueue-Dokumentation.

Wenn ein DispatcherQueue für einen Thread, der XAML verwendet, heruntergefahren wird, werden diese Ereignisse in der folgenden Reihenfolge ausgelöst:

Zum Zeitpunkt des Auslösens des WindowsXamlManager.XamlShutdownCompletedOnThread-Ereignisses :

  • XAML hat alle aktiven XAML-Objekte entladen und das Unloaded-Ereignis für jedes Objekt ausgelöst.
  • XAML verfügt nicht mehr über einen Zustand, der dem aktuellen Thread zugeordnet ist. WindowsXamlManager.GetForCurrentThread wird zu diesem Zeitpunkt zurückgegeben null .
  • Der DispatcherQueue für den aktuellen Thread ist weiterhin verfügbar und verwendbar. Es befindet sich in seiner Herunterfahrenden Sequenz. Beachten Sie daher, dass das ShutdownStarting-Ereignis bereits ausgelöst wurde und nicht erneut ausgelöst wird.

Hinweis

Auch wenn Sie Close für das WindowsXamlManager-Objekt aufrufen oder alle Verweise darauf freigeben, wird dieses Ereignis trotzdem ausgelöst.

Gilt für: