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

Applies to Windows and Windows Phone

En este tema verás cómo restaurar datos de la aplicación importantes cuando el sistema reanude tu aplicación de Windows en tiempo de ejecución con DirectX con C++.

Registrar el controlador de eventos Resuming

Haz un registro para controlar el evento CoreApplication::Resuming, que indica que el usuario abandonó la aplicación y después volvió.

Agrega este código a la implementación del método IFrameworkView::Initialize del proveedor de vistas (denominado DirectXApp en el ejemplo):



using namespace concurrency;
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::UI::Core;
using namespace Windows::UI::ViewManagement;

MyViewProvider::MyViewProvider() :
    // class fields
    // ...
    bool m_visible;
    bool m_windowsClosed;
{

}

void MyViewProvider::Initialize(
    _In_ CoreApplicationView^ applicationView
    )
{

   // ...

   CoreApplication::Resuming +=
       ref new EventHandler<Platform::Object^>(this, &MyViewProvider::OnResuming);

   // ...
}

Actualizar el contenido mostrado tras la suspensión

Cuando la aplicación controla el evento Resuming, tiene la oportunidad de actualizar el contenido que muestra. Restaura cualquier aplicación que hayas guardado con el controlador para CoreApplication::Suspending y reinicia el procesamiento. Nota para desarrolladores de juegos: si suspendiste el motor de audio, ahora puedes reiniciarlo.


void MyViewProvider::OnResuming(
    _In_ Platform::Object^ /* sender */,
    _In_ Platform::Object^ /* args */
    )
{
    // restore app state, restart rendering/processing and refresh the display
}

Esta devolución de llamada se produce como un mensaje de eventos procesado por CoreDispatcher para el CoreWindow de la aplicación. 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).


// m_visible and m_windowsClose are class-level bool variables on MyViewProvider.

// ...

void MyViewProvider::Run()
{
    // your app's main loop!
    while (!m_windowClosed) // the app window is NOT closed
    {
        if (m_visible) // and if the app window is visible
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(
                                                           CoreProcessEventsOption::ProcessAllIfPresent
                                                           );
        }
        else 
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(
                                                           CoreProcessEventsOption::ProcessOneAndAllPending
                                                           );
        }
    }
}

Observaciones

El sistema suspende la aplicación cuando el usuario cambia a otra aplicación o al escritorio. El sistema reanuda la aplicación cuando el usuario vuelve a cambiar 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 la suspendiera. El sistema restaura la aplicación en el punto exacto en el que estaba, para que parezca al usuario que se ejecutaba en segundo plano 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. Si guardaste datos de estado de juego durante un evento de suspensión anterior, puedes restaurarlo ahora.

Temas relacionados

Cómo suspender una aplicación (DirectX y C++)
Cómo activar una aplicación (DirectX y C++)
Directrices para suspender y reanudar una aplicación
Ciclo de vida de la aplicación (aplicaciones de la Tienda)

 

 

Mostrar:
© 2014 Microsoft