Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med bakgrundsaktiviteter kan appen köra kod när appen inte är i förgrunden. I ett skrivbord Windows App SDK program har bakgrundsaktiviteten större flexibilitet än i UWP-appar, men du bör fortfarande hantera den på ett ansvarsfullt sätt för att säkerställa en bra upplevelse för användarna.
Important
Skrivbord Windows App SDK appar omfattas inte av samma begränsningar för bakgrundskörning som UWP-appar. Skrivbordsappar kan köra bakgrundstrådar fritt, underhålla långvariga uppgifter och använda standardmönster för .NET trådar. Men att vara en bra medborgare i systemet innebär att minimera onödigt arbete när användaren inte aktivt använder din app.
Metodtips för bakgrundsaktivitet
Följ dessa riktlinjer för att hålla appen effektiv:
Minska arbetet när användaren inte interagerar med din app
När användaren växlar till en annan app eller minimerar ditt fönster minskar du frekvensen för timers, nätverkssökning och annat bakgrundsarbete. Detta sparar batteri och frigör systemresurser för appen som användaren aktivt arbetar med.
Använda effektiva schemaläggningsmönster
Använd tidsbaserad schemaläggning i stället för snäva avsökningsslingor. För periodiskt arbete använder DispatcherTimer eller System.Threading.Timer med intervall som är lämpliga för ditt scenario.
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);
}
}
Svara på energi- och batteritillstånd
Kontrollera systemets energistatus och justera appens beteende i enlighet med detta. Minska bakgrundsaktiviteten när enheten körs på batteri och överväg att skjuta upp icke-nödvändigt arbete tills enheten är ansluten.
// 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.
}
Avbryt bakgrundsarbete när appen stängs
När appen stängs av avbryter du eventuella kvarvarande bakgrundsaktiviteter med hjälp av CancellationToken mönster. Detta hindrar din app från att lagra systemresurser när den inte längre visas.
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();
}
Använd bakgrundsaktiviteter med paketidentitet
Om din app paketeras med MSIX kan du också registrera bakgrundsaktiviteter som körs som svar på systemutlösare (till exempel ändringar i nätverkstillstånd, tidszoner eller användarnärvaro). Dessa uppgifter använder samma BackgroundTaskBuilder API som är tillgängligt i UWP. Mer information finns i Support your app with background tasks (Stöd för din app med bakgrundsaktiviteter).
Note
Paketerade appar (MSIX) kan använda BackgroundTaskBuilder för systemutlöst arbete. Opacketerade skrivbordsappar bör i stället använda standardmönster för trådhantering i .NET.
Relaterat innehåll
Windows developer