Arka plan etkinliğini iyileştirme

Arka plan görevleri, uygulama ön planda olmadığında uygulamanızın kod çalıştırmasına olanak sağlar. Masaüstü Windows Uygulama SDK'sı uygulamasında arka plan etkinliği, UWP uygulamalarına göre daha fazla esnekliğe sahiptir, ancak kullanıcılarınız için iyi bir deneyim sağlamak için bunu sorumlu bir şekilde yönetmeniz gerekir.

Important

Masaüstü Windows Uygulama SDK'sı uygulamaları, UWP uygulamalarıyla aynı arka plan yürütme kısıtlamalarına tabi değildir. Masaüstü uygulamaları arka plan iş parçacıklarını serbestçe çalıştırabilir, uzun süre çalışan görevleri sürdürebilir ve standart .NET iş parçacığı desenlerini kullanabilir. Ancak, sistemin iyi bir vatandaşı olmak, kullanıcı uygulamanızı etkin olarak kullanmadığında gereksiz işleri en aza indirmek anlamına gelir.

Arka plan etkinliği için en iyi yöntemler

Uygulamanızı verimli tutmak için şu yönergeleri izleyin:

Kullanıcı uygulamanızla etkileşim kurmadığında çalışmayı azaltın

Kullanıcı farklı bir uygulamaya geçtiğinde veya pencerenizi simge durumuna küçülttüğünde, zamanlayıcıların, ağ yoklama işlemlerinin ve diğer arka plan işlemlerinin sıklığını azaltın. Bu, pil tasarrufu sağlar ve kullanıcının etkin olarak çalıştığı uygulama için sistem kaynaklarını boşaltıyor.

Verimli zamanlama desenleri kullanma

Sıkı yoklama döngüleri yerine zamanlayıcı tabanlı zamanlama kullanın. Yinelenen işler için, senaryonuza uygun aralıklarla DispatcherTimer veya System.Threading.Timer kullanın.

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);
    }
}

Güç ve pil durumlarına yanıt verme

Sistemin güç durumunu denetleyin ve uygulamanızın davranışını buna göre ayarlayın. Cihaz pille çalışırken arka plan etkinliğini azaltın ve cihaz prize takılıncaya kadar gerekli olmayan çalışmayı ertelemeyi göz önünde bulundurun.

// 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.
}

Uygulama kapatıldığında arka plan çalışmasını iptal etme

Uygulamanız kapatıldığında, kalan arka plan görevlerini CancellationToken kalıplarını kullanarak iptal edin. Bu, uygulamanızın artık görünür olmadığında sistem kaynaklarını tutmasını engeller.

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();
}

Paket kimliğiyle arka plan görevlerini kullanma

Uygulamanız MSIX ile paketlenmişse, sistem tetikleyicilerine (ağ durumu değişiklikleri, saat dilimleri veya kullanıcı varlığı gibi) yanıt olarak çalışan arka plan görevlerini de kaydedebilirsiniz. Bu görevler, UWP'de mevcut olan aynı BackgroundTaskBuilder API'yi kullanır. Daha fazla bilgi için bkz . Uygulamanızı arka plan görevleriyle destekleme.

Note

Paketlenmiş uygulamalar (MSIX), sistem tarafından tetiklenen görevler için BackgroundTaskBuilder kullanabilir. Paketlenmemiş masaüstü uygulamaları bunun yerine standart .NET iş parçacığı desenleri kullanmalıdır.