Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
Kapcsolódó tartalom
Windows developer