Partager via


Comment reprendre une application (DirectX et C++)

Cette rubrique montre comment restaurer des données d’application importantes lorsque le système reprend votre application DirectX (UWP) plateforme Windows universelle.

Inscrire le gestionnaire d’événements de reprise

Inscrivez-vous pour gérer l’événement CoreApplication ::Resuming , qui indique que l’utilisateur s’est absenté de votre application, puis revenez-y.

Ajoutez ce code à votre implémentation de la méthode IFrameworkView ::Initialize de votre fournisseur de vues :

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

Lorsque votre application gère l’événement De reprise, elle a la possibilité d’actualiser son contenu affiché. Restaurez toutes les applications que vous avez enregistrées avec votre gestionnaire pour CoreApplication ::Suspending et redémarrez le traitement. Les développeurs de jeux : si vous avez suspendu votre moteur audio, il est maintenant temps de le redémarrer.

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 en tant que message d’événement traité par CoreDispatcher pour CoreWindow de l’application. Ce rappel ne sera pas appelé si vous n’appelez pas CoreDispatcher ::P rocessEvents à partir de la boucle principale de votre application (implémenté dans la méthode IFrameworkView ::Run de votre fournisseur de vues).

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

Notes

Le système suspend votre application chaque fois que l’utilisateur passe à une autre application ou au bureau. Le système reprend votre application chaque fois que l’utilisateur revient à celle-ci. Lorsque le système reprend votre application, le contenu de vos variables et structures de données est le même que celui que le système a suspendu l’application. Le système restaure l’application exactement là où elle s’est arrêtée, afin qu’elle apparaisse à l’utilisateur comme s’il était en cours d’exécution en arrière-plan. Toutefois, l’application a peut-être été suspendue pendant un certain temps, de sorte qu’elle doit actualiser tout contenu affiché qui a peut-être changé pendant la suspension de l’application et redémarrer les threads de rendu ou de traitement audio. Si vous avez enregistré des données d’état de jeu lors d’un événement de suspension précédent, restaurez-la maintenant.