本文提供使用背景工作的概觀,並說明如何在 WinUI 3 應用程式中建立新的背景工作。 如需將使用背景工作的 UWP 應用程式遷移至 WinUI 的相關資訊,請參閱 Windows App SDK 背景工作任務遷移策略。
Windows App SDK 中的 BackgroundTaskBuilder
背景工作是在沒有使用者介面的情況下在背景中執行的應用程式元件。 他們可以執行動作,例如下載檔案、同步處理數據、傳送通知或更新磚。 這些事件可由各種事件觸發,例如時間、系統變更、用戶動作或推播通知。 即使應用程式未處於執行狀態,這些工作也會在對應的觸發程式發生時執行。
Windows 執行階段(WinRT)BackgroundTaskBuilder 是為 UWP 應用程式設計,而在完全信任環境下的 COM 元件不支援許多背景工作觸發器。 僅當註冊到以 backgroundtaskhost 程序啟動的 WinRT 元件時,它們才受到支持。 因此,Windows App SDK 傳統型應用程式無法透過背景工作觸發程式直接註冊要啟動的完整信任 COM 元件。 他們需要一個替代方案,即將 WinRT 元件包含在專案中。 Windows App SDK API 中的 BackgroundTaskBuilder 可以避免這種因應措施,因此 WinUI 3 和其他使用 Windows App SDK 的桌面應用程式可以直接通過背景工作註冊全信任的 COM 元件。
註冊一項背景工作
下列範例會使用 Windows App SDK BackgroundTaskBuilder註冊完全信任 COM 元件的背景工作。 如需詳細資訊,請參閱 背景工作移轉策略 指南。
要建立和註冊背景工作的C++程序代碼如下所示:
//Using the Windows App SDK API for BackgroundTaskBuilder
winrt::Microsoft::Windows::ApplicationModel::Background::BackgroundTaskBuilder builder;
SystemTrigger trigger = SystemTrigger(SystemTriggerType::TimeZoneChange, false);
auto backgroundTrigger = trigger.as<IBackgroundTrigger>();
builder.SetTrigger(backgroundTrigger);
builder.AddCondition(SystemCondition(SystemConditionType::InternetAvailable));
builder.SetTaskEntryPointClsid(classGuid);
builder.Register();
若要在 C# 中建立及註冊背景工作,程式代碼如下所示:
//Using the Windows App SDK API for BackgroundTaskBuilder
var builder = new Microsoft.Windows.ApplicationModel.Background.BackgroundTaskBuilder();
var trigger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);
var backgroundTrigger = trigger as IBackgroundTrigger;
builder.SetTrigger(backgroundTrigger);
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.SetTaskEntryPointClsid(classGuid);
builder.Register();
背景工作的對應套件清單項目如下所示:
<Extension Category="windows.backgroundTasks" EntryPoint="Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.Task">
<BackgroundTasks>
<Task Type="general"/>
</BackgroundTasks>
</Extension>
您可以在 GitHub 找到完整的 WinUI 3 背景工作註冊範例。