Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Фоновые задачи позволяют приложению запускать код, если приложение не находится на переднем плане. В классическом приложении Windows App SDK фоновые действия имеют большую гибкость, чем в приложениях UWP, но вы по-прежнему должны управлять им ответственно, чтобы обеспечить хороший интерфейс для пользователей.
Important
На классические приложения Windows App SDK не распространяются те же ограничения на фоновое выполнение, что и на приложения UWP. Классические приложения могут свободно запускать фоновые потоки, поддерживать длительные задачи и использовать стандартные шаблоны потоков .NET. Однако быть хорошим гражданином системы означает минимизацию ненужных работ, когда пользователь не активно использует ваше приложение.
Рекомендации по фоновой активности
Следуйте этим рекомендациям, чтобы обеспечить эффективность приложения:
Сокращение работы, если пользователь не взаимодействует с приложением
Когда пользователь переключается на другое приложение или свернет окно, уменьшите частоту таймеров, сетевого опроса и других фоновых работ. Это экономит батарею и освобождает системные ресурсы для приложения, с которым активно работает пользователь.
Использование эффективных шаблонов планирования
Используйте планирование на основе таймера, а не жесткие циклы опроса. Для периодической работы используйте DispatcherTimerSystem.Threading.Timer интервалы, соответствующие вашему сценарию.
private DispatcherTimer _updateTimer;
private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
{
if (args.WindowActivationState == WindowActivationState.Deactivated)
{
// Window is no longer active — slow down updates.
_updateTimer.Interval = TimeSpan.FromSeconds(30);
}
else
{
// Window is active — use normal update rate.
_updateTimer.Interval = TimeSpan.FromSeconds(2);
}
}
Реагирование на состояния питания и батареи
Проверьте состояние питания системы и измените поведение приложения соответствующим образом. Уменьшите фоновую активность при запуске устройства на батарее и рассмотрите возможность отложить неустранимую работу, пока устройство не будет подключено.
// Check power status using Windows.System.Power
var batteryStatus = Windows.System.Power.PowerManager.BatteryStatus;
var energySaverStatus = Windows.System.Power.PowerManager.EnergySaverStatus;
if (energySaverStatus == Windows.System.Power.EnergySaverStatus.On)
{
// Reduce background work when Battery Saver is active.
DisableNonEssentialUpdates();
}
void DisableNonEssentialUpdates()
{
// Pause non-essential timers, syncs, and animations here.
}
Отмена фоновой работы при закрытии приложения
После завершения работы приложения отмените все остальные фоновые задачи с помощью CancellationToken шаблонов. Это предотвращает хранение системных ресурсов приложения после того, как оно больше не отображается.
private CancellationTokenSource _cts = new();
private async Task DoBackgroundWorkAsync()
{
while (!_cts.Token.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromSeconds(10), _cts.Token);
// Perform periodic work.
}
}
private void MainWindow_Closed(object sender, WindowEventArgs args)
{
_cts.Cancel();
}
Использование фоновых задач с идентификатором пакета
Если приложение упаковано с помощью MSIX, вы также можете зарегистрировать фоновые задачи, которые выполняются в ответ на системные триггеры (например, изменения состояния сети, часовые пояса или присутствие пользователя). Эти задачи используют тот же BackgroundTaskBuilder API, что и в UWP. Дополнительные сведения см. в статье "Поддержка приложения с помощью фоновых задач".
Note
Упакованные приложения (MSIX) могут использовать BackgroundTaskBuilder для работы, запускаемой системой. Вместо этого непакованные классические приложения должны использовать стандартные .NET шаблоны потоков.
Связанные материалы
Windows developer