Compartilhar via


Como retomar um aplicativo (DirectX e C++)

Este tópico mostra como restaurar dados importantes do aplicativo quando o sistema retoma o aplicativo UWP (Plataforma Universal do Windows) DirectX.

Registrar o manipulador de eventos de retomada

Registre para manipular o evento CoreApplication::Resuming que indica que o usuário alternou para outro aplicativo que não o seu e, depois, retornou.

Adicione este código à sua implementação do método IFrameworkView::Initialize de seu provedor de exibição:

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

}

Atualizar o conteúdo exibido após a suspensão

Quando seu aplicativo manipula o evento Resuming, ele tem a oportunidade de atualizar o conteúdo exibido. Restaure qualquer aplicativo que você tenha salvo com seu manipulador para CoreApplication::Suspending e reinicie o processamento. Desenvolvedores de jogos: se você suspendeu seu mecanismo de áudio, agora é o momento de reiniciá-lo.

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.
}

Essa chamada de retorno ocorre como uma mensagem de evento processada pelo CoreDispatcher para o CoreWindow do aplicativo. Essa chamada de retorno não será solicitada se você não chamar o CoreDispatcher::ProcessEvents no loop principal do aplicativo (implementado no método IFrameworkView::Run de seu provedor de visualização).

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

Comentários

O sistema suspende o aplicativo sempre que o usuário alterna para outro aplicativo ou para a área de trabalho. O sistema retoma o seu aplicativo sempre que o usuário alterna de volta para ele. Quando o sistema retoma o aplicativo, o conteúdo das variáveis e estruturas de dados é o mesmo de antes da suspensão do aplicativo pelo sistema. O sistema restaura o aplicativo exatamente como ele havia parado, de maneira que o usuário tem impressão de que ele estava sendo executado em tela de fundo. Porém, o aplicativo pode ter sido suspenso durante um período de tempo significativo, assim ele deve atualizar qualquer conteúdo exibido que pode ter alterado enquanto o aplicativo estava suspenso,e reinicie quaisquer threads de renderização ou processamento de áudio. Se você salvou quaisquer dados de estado de jogo durante um evento suspenso anterior, restaure-o agora.