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