Háttértevékenység optimalizálása

A háttérfeladatok lehetővé teszik, hogy az alkalmazás kódot futtasson, ha az alkalmazás nincs az előtérben. Az asztali Windows App SDK alkalmazásokban a háttértevékenység nagyobb rugalmasságot biztosít, mint az UWP-alkalmazásokban, de felelősségteljesen kell kezelnie, hogy a felhasználók számára megfelelő élményt biztosítson.

Important

Az asztali Windows App SDK alkalmazásokra nem vonatkoznak ugyanazok a háttér-végrehajtási korlátozások, mint az UWP-alkalmazásokra. Az asztali alkalmazások szabadon futtathatnak háttérszálakat, hosszú ideig futó feladatokat tarthatnak fenn, és szabványos .NET szálmintákat használhatnak. A rendszer jó polgárának lenni azonban azt jelenti, hogy minimálisra csökkenti a szükségtelen munkát, ha a felhasználó nem használja aktívan az alkalmazást.

A háttértevékenység ajánlott eljárásai

Kövesse az alábbi irányelveket az alkalmazás hatékonyságának megőrzéséhez:

Munka csökkentése, ha a felhasználó nem használja az alkalmazást

Amikor a felhasználó átvált egy másik alkalmazásra, vagy minimalizálja az ablakot, csökkentse az időzítők, a hálózati lekérdezések és egyéb háttérmunka gyakoriságát. Ez fenntartja az akkumulátort, és felszabadítja a rendszer erőforrásait annak az alkalmazásnak, amellyel a felhasználó aktívan dolgozik.

Hatékony ütemezési minták használata

Használjon időzítőalapú ütemezést a szűk lekérdezési ciklusok helyett. Rendszeres munkához használja DispatcherTimer vagy System.Threading.Timer a forgatókönyvnek megfelelő időközökkel.

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

Válasz az energia- és akkumulátorállapotokra

Ellenőrizze a rendszer energiaállapotát, és ennek megfelelően állítsa be az alkalmazás viselkedését. Csökkentse a háttértevékenységet, amikor az eszköz akkumulátoron fut, és fontolja meg a nem alapvető munka elhalasztása, amíg az eszköz csatlakoztatva van.

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

Háttérmunka megszakítása az alkalmazás bezárásakor

Amikor az alkalmazás leáll, a fennmaradó háttérfeladatokat CancellationToken mintákkal szakítsa meg. Ez megakadályozza, hogy az alkalmazás a már nem látható rendszererőforrásokat tartsa.

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

Háttérfeladatok használata csomagidentitással

Ha az alkalmazás MSIX-sel van csomagolva, regisztrálhat olyan háttérfeladatokat is, amelyek a rendszer eseményindítóira (például hálózati állapotváltozásokra, időzónákra vagy felhasználói jelenlétre) reagálva futnak. Ezek a feladatok ugyanazt BackgroundTaskBuilder az API-t használják, amely az UWP-ben érhető el. További információ: Az alkalmazás támogatása háttérfeladatokkal.

Note

A csomagolt alkalmazások (MSIX) a BackgroundTaskBuilder használhatják rendszer által kiváltott feladatokhoz. A csomagolatlan asztali alkalmazásoknak ehelyett szabványos .NET szálmintát kell használniuk.