Cómo reanudar una aplicación (DirectX y C++)How to resume an app (DirectX and C++)

En este tema se muestra cómo restaurar datos importantes de la aplicación cuando el sistema reanuda la aplicación DirectX para la Plataforma universal de Windows (UWP).This topic shows how to restore important application data when the system resumes your Universal Windows Platform (UWP) DirectX app.

Registrar el controlador de eventos de reanudaciónRegister the resuming event handler

Haz un registro para controlar el evento CoreApplication::Resuming, que indica que el usuario abandonó la aplicación y después volvió.Register to handle the CoreApplication::Resuming event, which indicates that the user switched away from your app and then back to it.

Agrega este código a la implementación del método IFrameworkView::Initialize del proveedor de vistas: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);
    
  //...

}

Actualizar el contenido mostrado tras la suspensiónRefresh displayed content after suspension

Cuando la aplicación controla el evento Resuming, tiene la oportunidad de actualizar el contenido mostrado.When your app handles the Resuming event, it has the opportunity to refresh its displayed content. Restaura cualquier aplicación que hayas guardado con el controlador para CoreApplication::Suspending y reinicia el procesamiento.Restore any app you have saved with your handler for CoreApplication::Suspending, and restart processing. Nota para desarrolladores de juegos: Si suspendiste el motor de audio, es el momento de reiniciarlo.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.
}

Esta devolución de llamada se produce como un mensaje de evento procesado por CoreDispatcher para el elemento CoreWindow de la aplicación.This callback occurs as an event message processed by the CoreDispatcher for the app's CoreWindow. Esta devolución de llamada no se invocará si no llamas a CoreDispatcher::ProcessEvents desde el bucle principal de la aplicación (implementado en el método IFrameworkView::Run del proveedor de vistas).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);
        }
    }
}

ObservacionesRemarks

El sistema suspende la aplicación cuando el usuario cambia a otra aplicación o al escritorio.The system suspends your app whenever the user switches to another app or to the desktop. El sistema reanuda la aplicación cuando el usuario vuelve a cambiar a ella.The system resumes your app whenever the user switches back to it. Cuando el sistema reanuda la aplicación, el contenido de las variables y las estructuras de datos es el mismo que antes de que el sistema la suspendiera.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. El sistema restaura la aplicación en el punto exacto en el que estaba, para que parezca al usuario que se ejecutaba en segundo planoThe 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. No obstante, es posible que la aplicación haya estado suspendida durante un período de tiempo largo. Por ello, debes actualizar el contenido mostrado que puede haber cambiado mientras la aplicación estaba suspendida, y reiniciar cualquier subproceso de representación o de procesamiento de audio.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 guardaste datos de estado del juego durante un evento de suspensión anterior, restáuralos ahora.If you've saved any game state data during a previous suspend event, restore it now.