Windows 應用程式 SDK 桌面應用程式中的背景執行

使用 Windows 應用程式 SDK 建置的桌面應用程式會持續執行,即使使用者切換到其他應用程式。 本文說明背景執行的運作方式,並建議效率最佳實務。

Important

桌面應用程式不會像 UWP 應用程式那樣 被系統自動暫停或終止 。 你的應用程式會持續執行,直到使用者關閉它或程序退出為止。 無需特殊 API 或受限功能即可無限運行。 適當時使用系統記憶體通知來回應資源壓力。

桌面應用程式會原生在背景執行

在 UWP 中,若要在背景中無限期執行,則需要 extendedBackgroundTaskTime 受限制功能和企業部署。 桌面應用程式則沒有這個限制。 你的應用程式執行緒持續執行,計時器持續觸發,網路連線也保持開啟,不論視窗是否可見。

這表示您可以:

  • 維持與伺服器的持續連線(例如聊天應用程式、即時監控)。
  • 執行長時間運算(例如影片編碼、資料分析)。
  • 請投票以獲取時間表的最新消息。
  • 播放音訊並更新媒體控制。

電池效率的最佳實務

雖然桌面應用程式可以不受限制地運行,但在電池供電裝置上做個好公民,能提升使用者體驗。 如果你的應用程式在背景使用過多 CPU 或網路,系統可能會標記為資源重度消耗者。

減少窗戶看不見時的工作量

// m_window is your app's main Window; _updateTimer is a DispatcherTimer field.
Microsoft.UI.Xaml.Window m_window = this;
Microsoft.UI.Xaml.DispatcherTimer _updateTimer = new();

m_window.Activated += (sender, args) =>
{
    if (args.WindowActivationState == WindowActivationState.Deactivated)
    {
        // Window lost focus — slow down background processing
        _updateTimer.Interval = TimeSpan.FromSeconds(30);
    }
    else
    {
        // Window is active — resume full-speed processing
        _updateTimer.Interval = TimeSpan.FromSeconds(1);
    }
};

使用具功耗意識的模式

  • 降低計時頻率 — 當應用程式在背景運作時,將間隔從亞秒切換到多秒。
  • 暫停非必要的渲染 — 停止動畫、GPU 工作和螢幕更新。
  • 批次網路請求 — 將多個請求合併成較少且較大的請求。
  • 尊重省電 功能 — 檢查 PowerManager.BatteryStatus ,並在裝置有電池時減少工作量。
using Windows.System.Power;

private bool _enableBackgroundSync = true;

private void CheckPowerState()
{
    if (PowerManager.BatteryStatus == BatteryStatus.Discharging &&
        PowerManager.RemainingChargePercent < 20)
    {
        // Reduce background work significantly
        _enableBackgroundSync = false;
    }
}

在事件驅動工作中使用背景任務

如果你的應用程式需要在不持續運行的情況下回應系統事件(如計時器、推播通知或網路變更),建議改用背景任務:

var builder = new BackgroundTaskBuilder
{
    Name = "PeriodicSync",
    TaskEntryPoint = "MyApp.Background.SyncTask"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();

Note

背景任務需要 MSIX 套件識別碼來註冊。 如果你的應用程式是未封裝的,建議改用流程中計時器或排程任務。

關鍵工作的延長執行

當你有不應該被電源管理中斷的工作(例如儲存大型檔案)時,可以使用 延長執行階段。 這向系統傳達你的工作很重要的訊號,即使是在電池供電的裝置上也是如此。

與 UWP 背景執行的比較

Feature UWP 桌面
應用程式在背景執行 僅限背景工作或受限功能 永遠
需要能力聲明 是的(extendedBackgroundTaskTime No
系統終止以節省資源 Yes No
省電模式節流 系統強制執行限制 應用程式應該自我調節
事件驅動作業的背景任務 主要機制 可選補足