Comment relancer une application (DirectX et C++)How to resume an app (DirectX and C++)

Cette rubrique montre comment restaurer des données d’application importantes lorsque le système reprend l’exécution de votre application DirectX de plateforme UWP.This topic shows how to restore important application data when the system resumes your Universal Windows Platform (UWP) DirectX app.

Enregistrer le gestionnaire d’événement de repriseRegister the resuming event handler

Enregistrez-vous pour traiter l’événement CoreApplication::Resuming, qui indique que l’utilisateur revient vers votre application après s’en être éloigné.Register to handle the CoreApplication::Resuming event, which indicates that the user switched away from your app and then back to it.

Ajoutez le code suivant à votre implémentation de la méthode IFrameworkView::Initialize de votre fournisseur d’affichage :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);
    
  //...

}

Actualiser le contenu affiché après la suspensionRefresh displayed content after suspension

Lorsque votre application gère l’événement de reprise, elle a la possibilité d’actualiser son contenu à l’écran.When your app handles the Resuming event, it has the opportunity to refresh its displayed content. Restaurez toutes les applications que vous avez enregistrées avec votre gestionnaire pour CoreApplication :: suspending, puis redémarrez le traitement.Restore any app you have saved with your handler for CoreApplication::Suspending, and restart processing. Développeurs de jeux : si vous avez suspendu votre moteur audio, il est temps de le redémarrer.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.
}

Ce rappel se produit sous la forme d’un message d’événement traité par CoreDispatcher pour le CoreWindowde l’application.This callback occurs as an event message processed by the CoreDispatcher for the app's CoreWindow. Ce rappel n’est pas effectué si vous n’appelez pas CoreDispatcher::ProcessEvents à partir de la boucle principale de votre application (mise en œuvre dans la méthode IFrameworkView::Run de votre fournisseur d’affichage).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);
        }
    }
}

RemarquesRemarks

Le système suspend votre application chaque fois que l’utilisateur bascule vers une autre application ou vers le Bureau.The system suspends your app whenever the user switches to another app or to the desktop. Le système en reprend l’exécution lorsque l’utilisateur revient à votre application.The system resumes your app whenever the user switches back to it. Dès lors, le contenu de vos variables et structures de données restent identiques à ce qu’elles étaient avant que le système ne suspende l’application.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. Le système rétablit l’application exactement dans l’état où il l’a laissée, de sorte qu’elle semble s’être exécutée en arrière-plan.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. Cependant, il se peut que l’application ait été suspendue pendant une durée significative. Elle doit dans ce cas actualiser le contenu affiché susceptible d’avoir changé pendant l’inactivité et redémarrer les threads de traitement audio ou de rendu.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. Si vous avez enregistré des données d’état de jeu durant un événement de suspension précédent, restaurez-les maintenant.If you've saved any game state data during a previous suspend event, restore it now.