在 Windows 應用程式 SDK 桌面應用程式中使用擴展執行

延長執行會話讓你的應用程式能請求系統在特定情境下持續運行,即使這在電池供電裝置上本可能減少資源。 雖然桌面應用程式不會自動暫停,但延長執行仍有助於向系統傳達意圖。

Important

桌面應用程式無論是否使用延伸執行,都會繼續運行。 在桌面應用程式中使用 ExtendedExecutionSession 的主要好處,是讓系統知道目前的工作很重要,不應遭到 Modern Standby 或電池節約模式等省電措施中斷。

何時使用擴展執行

延長執行會話在桌面應用程式中最為有用,用於:

  • 儲存關鍵資料 — 確保大型儲存操作在裝置進入待機前完成。
  • 位置追蹤 — 在筆記型電腦上將應用程式最小化時,持續傳送 GPS 資料。
  • 長期運算 — 完成渲染、編譯或資料分析任務。

對於桌面應用程式需要持續運行的情況(例如聊天應用程式或音樂播放器),你 不需要 延長執行——應用程式會正常運行。

建立延伸執行工作階段

使用 ExtendedExecutionSession 類別:

using Windows.ApplicationModel.ExtendedExecution;

private ExtendedExecutionSession? _session;

private async Task StartExtendedSessionAsync()
{
    var session = new ExtendedExecutionSession
    {
        Reason = ExtendedExecutionReason.Unspecified,
        Description = "Completing critical data save"
    };

    session.Revoked += ExtendedSession_Revoked;

    ExtendedExecutionResult result = await session.RequestExtensionAsync();

    if (result == ExtendedExecutionResult.Allowed)
    {
        _session = session;
        // Proceed with the long-running work
    }
    else
    {
        session.Dispose();
        // The system denied the request — handle gracefully
    }
}

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
    // The session was revoked. Save state quickly.
    if (args.Reason == ExtendedExecutionRevokedReason.SystemPolicy)
    {
        // System needs resources — wrap up immediately
    }
}

延長執行原因

Reason 應用案例
SavingData 你的應用程式需要完成一個存檔操作
LocationTracking 你的應用程式正在追蹤使用者的位置
Unspecified 其他長時間執行的工作

Note

LocationTracking 需要在應用程式資訊清單中宣告 location 功能,並取得使用者同意。

結束本次會議

完成工作後,處理該會話以釋放請求:

private ExtendedExecutionSession? _session;

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
}

private void StopExtendedSession()
{
    if (_session != null)
    {
        _session.Revoked -= ExtendedSession_Revoked;
        _session.Dispose();
        _session = null;
    }
}

與 UWP 的差異

行為 UWP 桌面
Purpose 防止懸吊 顯示其對電源管理的重要性
App 在沒有它的情況下還是會繼續運行 不行 — UWP 應用程式會暫停 是的——桌面應用程式可以正常運行
會議撤銷 可能導致停權 不會讓應用程式停止使用,但可能會有省電效果
SavingData 原因 防止在儲存期間進入暫停狀態 API 一樣,但因為應用程式不會暫停,所以這點比較不重要

最佳做法

  • 只有在你有明確的工作,而且該工作不應因省電功能而中斷時,才請求延長執行。
  • 即使是桌面應用程式,也一定要處理 Revoked 事件。
  • 工作完成後立即處理該會話。
  • 不要無限期長時間使用——這會影響裝置的電池續航。