ユーザーが別のアプリに切り替えた場合でも、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 パッケージ ID が必要です。 アプリがパッケージ化されていない場合は、代わりにインプロセス タイマーまたはスケジュールされたタスクを使用します。
重要な作業向けの実行時間延長
電源管理によって中断されない作業 (大きなファイルの保存など) がある場合は、 拡張実行セッションを使用します。 これは、バッテリ駆動デバイスでも、作業が重要であることをシステムに通知します。
UWP バックグラウンド実行との比較
| 特徴 | UWP | デスクトップ |
|---|---|---|
| アプリがバックグラウンドで実行される | バックグラウンド タスクまたは制限された機能でのみ | いつも |
| 機能宣言が必要 | はい (extendedBackgroundTaskTime) |
いいえ |
| システムが終了してリソースを保存する | はい | いいえ |
| バッテリー 節約機能の調整 | システムによって制限が適用される | アプリは自己規制する必要がある |
| イベント駆動型作業のバックグラウンド タスク | 主なメカニズム | 省略可能な補語 |
関連するコンテンツ
Windows developer