So wird's gemacht - Reaktivieren einer App (DirectX und C++)How to resume an app (DirectX and C++)

In diesem Thema erfahren Sie, wie wichtige Anwendungsdaten wiederhergestellt werden, wenn das System Ihre DirectX-App für die Universelle Windows-Plattform (UWP) fortsetzt.This topic shows how to restore important application data when the system resumes your Universal Windows Platform (UWP) DirectX app.

Registrieren des „resuming“-EreignishandlersRegister the resuming event handler

Registrieren Sie die Behandlung des CoreApplication::Resuming-Ereignisses, mit dem angegeben wird, dass der Benutzer aus der App und wieder zurück gewechselt hat.Register to handle the CoreApplication::Resuming event, which indicates that the user switched away from your app and then back to it.

Fügen Sie Ihrer Implementierung der IFrameworkView::Initialize-Methode Ihres Ansichtsanbieters folgenden Code hinzu:Add this code to your implementation of the IFrameworkView::Initialize method of your view provider:

// The first method is called when the IFrameworkView is being created.
void App::Initialize(CoreApplicationView^ applicationView)
{
  //...
  
    CoreApplication::Resuming +=
        ref new EventHandler<Platform::Object^>(this, &App::OnResuming);
    
  //...

}

Aktualisieren der angezeigten Inhalte nach einer UnterbrechungRefresh displayed content after suspension

Wenn die App das Resuming-Ereignis behandelt, kann der angezeigte Inhalt aktualisiert werden.When your app handles the Resuming event, it has the opportunity to refresh its displayed content. Stellen Sie alle mit dem Handler für CoreApplication::Suspending gespeicherten Apps wieder her, und setzen Sie die Verarbeitung fort.Restore any app you have saved with your handler for CoreApplication::Suspending, and restart processing. Für Spieleentwickler: Wenn Sie das Audiomodul angehalten haben, muss es jetzt neu gestartet werden.Game devs: if you've suspended your audio engine, now's the time to restart it.

void App::OnResuming(Platform::Object^ sender, Platform::Object^ args)
{
    // Restore any data or state that was unloaded on suspend. By default, data
    // and state are persisted when resuming from suspend. Note that this event
    // does not occur if the app was previously terminated.

    // Insert your code here.
}

Dieser Rückruf tritt als Ereignismeldung auf, die vom CoreDispatcher-Element des CoreWindow-Elements der App verarbeitet wird.This callback occurs as an event message processed by the CoreDispatcher for the app's CoreWindow. Dieser Rückruf wird nicht aufgerufen, wenn Sie in der Hauptschleife der App (in der IFrameworkView::Run-Methode des Ansichtsanbieters implementiert) CoreDispatcher::ProcessEvents nicht aufrufen.This callback will not be invoked if you do not call CoreDispatcher::ProcessEvents from your app's main loop (implemented in the IFrameworkView::Run method of your view provider).

// This method is called after the window becomes active.
void App::Run()
{
    while (!m_windowClosed)
    {
        if (m_windowVisible)
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);

            m_main->Update();

            if (m_main->Render())
            {
                m_deviceResources->Present();
            }
        }
        else
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
        }
    }
}

BemerkungenRemarks

Das System hält Ihre App an, wenn der Benutzer zu einer anderen App oder zum Desktop wechselt.The system suspends your app whenever the user switches to another app or to the desktop. Wenn der Benutzer wieder zu Ihrer App wechselt, wird diese vom System fortgesetzt.The system resumes your app whenever the user switches back to it. Beim Fortsetzen der App haben die Variablen und Datenstrukturen den gleichen Inhalt wie vor der Unterbrechung.When the system resumes your app, the content of your variables and data structures is the same as it was before the system suspended the app. Das System stellt die App exakt so wieder her, wie sie unterbrochen wurde. Dadurch entsteht für den Benutzer der Eindruck, die App wäre im Hintergrund weiter ausgeführt worden.The system restores the app exactly where it left off, so that it appears to the user as if it's been running in the background. Da die App jedoch unter Umständen längere Zeit angehalten war, müssen sämtliche angezeigten Inhalte, die sich möglicherweise in der Zwischenzeit geändert haben, aktualisiert werden, und alle Rendering- und Audioverarbeitungs-Threads müssen neu gestartet werden.However, the app may have been suspended for a significant amount of time, so it should refresh any displayed content that might have changed while the app was suspended, and restart any rendering or audio processing threads. Wenn Sie während eines vorherigen Anhalteereignisses Spielstände gespeichert haben, müssen Sie diese nun wiederherstellen.If you've saved any game state data during a previous suspend event, restore it now.