Windows Dev Center

Come riprendere un'app (DirectX e C++)

In questo argomento viene illustrato come ripristinare i dati importanti dell'applicazione quando il sistema riprende la tua app di Windows Runtime basata su DirectX con C++.

Registrare il gestore dell'evento di ripresa

Registra il gestore per gestire l'evento CoreApplication::Resuming, con cui si indica che l'utente ha lasciato l'app e poi è tornato.

Aggiungi il codice all'implementazione del metodo IFrameworkView::Initialize del provider di visualizzazione (denominato DirectXApp nell'esempio):



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

   // ...
}

Aggiorna la visualizzazione del contenuto dopo la sospensione

Quando l'app gestisce l'evento di ripresa, può aggiornare il contenuto visualizzato. Ripristina eventuali app salvate con il gestore per CoreApplication::Suspending e riavvia l'elaborazione. Per gli sviluppatori di giochi: se il modulo audio è stato sospeso, è il momento di riavviarlo.


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

I callback si verificano come messaggi di evento elaborati da CoreDispatcher per CoreWindow dell'app. Questo callback non verrà richiamato se non chiami CoreDispatcher::ProcessEvents dal ciclo principale dell'app (implementato nel metodo IFrameworkView::Run del provider della visualizzazione).


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

Osservazioni

Il sistema sospende l'esecuzione dell'app tutte le volte che l'utente passa a un'altra app o al desktop. Il sistema riprende l'esecuzione dell'app ogni volta che l'utente vi ritorna. Quando il sistema riprende l'esecuzione dell'app, il contenuto delle variabili e delle strutture di dati è lo stesso di prima della sospensione dell'esecuzione. Il sistema riprende l'esecuzione dell'app esattamente dal punto in cui era stata interrotta, dando all'utente l'impressione che venisse eseguita in background. Tuttavia, è possibile che l'esecuzione dell'app sia stata sospesa per un lasso di tempo considerevole, perciò si deve aggiornare la visualizzazione di eventuale contenuto modificato mentre l'esecuzione dell'app era sospesa e riavviare eventuali thread di rendering o di elaborazione audio. Se hai salvato dati sullo stato del gioco durante un evento di sospensione precedente, ripristinali.

Argomenti correlati

Come sospendere un'app (DirectX e C++)
Come attivare un'app (DirectX e C++)
Linee guida per sospendere e riprendere l'esecuzione di un'app
Ciclo di vita delle applicazioni (app di Windows Store)

 

 

Mostra:
© 2015 Microsoft