Compartir a través de


Cómo reanudar una aplicación (DirectX y C++)

En este tema se muestra cómo restaurar datos importantes de la aplicación cuando el sistema reanuda la aplicación DirectX de Plataforma universal de Windows (UWP).

Registro del controlador de eventos de reanudación

Regístrese para controlar el evento CoreApplication::Resuming , que indica que el usuario ha cambiado de la aplicación y, a continuación, vuelve a ella.

Agregue este código a la implementación del método IFrameworkView::Initialize del proveedor de vistas:

// 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 contenido mostrado después de la suspensión

Cuando la aplicación controla el evento Resuming, tiene la oportunidad de actualizar su contenido mostrado. Restaure cualquier aplicación que haya guardado con el controlador para CoreApplication::Suspending y reinicie el procesamiento. Desarrolladores de juegos: si has suspendido el motor de audio, ahora es el momento de reiniciarlo.

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 CoreWindow de la aplicación. Esta devolución de llamada no se invocará si no llamas a CoreDispatcher::P rocessEvents desde el bucle principal de la aplicación (implementado en el método IFrameworkView::Run del proveedor de vistas).

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

Comentarios

El sistema suspende la aplicación cada vez que el usuario cambia a otra aplicación o al escritorio. El sistema reanuda la aplicación cada vez que el usuario vuelve a ella. 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 suspendiera la aplicación. El sistema restaura la aplicación exactamente donde se dejó, de modo que parezca al usuario como si estuviera ejecutándose en segundo plano. Sin embargo, es posible que la aplicación se haya suspendido durante una cantidad significativa de tiempo, por lo que debe actualizar cualquier contenido mostrado que pueda haber cambiado mientras se suspendió la aplicación y reiniciar cualquier representación o subproceso de procesamiento de audio. Si has guardado datos de estado del juego durante un evento de suspensión anterior, restáurelo ahora.