この記事では、バックグラウンド タスクの使用の概要と、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 は、この回避策を回避するため、Windows App SDK を使用する WinUI 3 やその他のデスクトップ アプリケーションは、完全信頼 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>
完全な WinUI 3 バックグラウンド タスク登録サンプルは、GitHub にあります。
関連コンテンツ
Windows developer