共用方式為


如何恢復應用程式 (DirectX 和 C++)

本主題說明如何在系統恢復您的 Universal Windows Platform (UWP) DirectX 應用程式時還原重要的應用程式資料。

註冊繼續事件處理常式

註冊以處理 CoreApplication::Resumpting event,這表示使用者從您的應用程式切換至該應用程式。

將此程式碼加入檢視提供者的 IFrameworkView::Initialize 方法的實作:

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

}

暫停後重新整理顯示的內容

當您的應用程式處理 Resumpting 事件時,它會有機會重新整理其顯示的內容。 還原任何與處理常式一起儲存的 CoreApplication::Suspending 應用程式,然後重新啟動處理。 遊戲程式:如果您暫停音訊引擎,現在就是重新啟動它的時候。

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

回呼是以 CoreDispatcher 為應用程式的 CoreWindow,處理之事件訊息的方式發生。 如果您沒有從應用程式的主回圈 (在檢視提供者的 IFrameworkView::Run 方法中實作) 呼叫 CoreDispatcher::ProcessEvents,將不會呼叫此回呼。

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

備註

每當使用者切換到其他應用程式或桌面時,系統就會暫停您的應用程式。 每當使用者切換回應用程式時,系統就會恢復該應用程式。 當系統恢復您的應用程式時,變數和資料結構的內容會與系統暫停應用程式之前的內容相同。 系統會將應用程式還原到停止的位置,讓使用者覺得它就像在背景中執行一樣。 但是,應用程式可能已暫停相當長一段時間,因此它應該刷新在應用程式暫停期間可能已更改的任何顯示內容,並重新啟動任何呈現或音訊處理執行緒。 如果您在上次暫停事件期間儲存任何遊戲狀態資料,請立即還原。