使用 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 |
| 省電模式節流 | 系統強制執行限制 | 應用程式應該自我調節 |
| 事件驅動作業的背景任務 | 主要機制 | 可選補足 |