Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le attività in background consentono all'app di eseguire codice quando l'app non è in primo piano. In un'applicazione desktop SDK per app di Windows, l'attività in background ha maggiore flessibilità rispetto alle app UWP, ma è comunque consigliabile gestirla in modo responsabile per garantire un'esperienza ottimale per gli utenti.
Importante
Le app desktop SDK per app di Windows non sono soggette alle stesse restrizioni di esecuzione in background delle app UWP. Le app desktop possono eseguire liberamente thread in background, gestire attività a esecuzione prolungata e usare modelli di threading standard .NET. Tuttavia, essere un buon cittadino del sistema significa ridurre al minimo il lavoro non necessario quando l'utente non usa attivamente l'app.
Procedure consigliate per l'attività in background
Seguire queste linee guida per mantenere efficiente l'app:
Ridurre il lavoro quando l'utente non interagisce con l'app
Quando l'utente passa a un'altra app o minimizza la finestra, riduci la frequenza dei timer, del polling di rete e di altre operazioni in background. Ciò consente di risparmiare batteria e libera le risorse di sistema per l'app con cui l'utente sta lavorando attivamente.
Usare modelli di pianificazione efficienti
Usare la pianificazione basata su timer anziché i cicli di polling ristretti. Per il lavoro periodico, usare DispatcherTimer o System.Threading.Timer con intervalli appropriati per lo 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);
}
}
Rispondere agli stati di alimentazione e batteria
Controllare lo stato di alimentazione del sistema e regolare il comportamento dell'app di conseguenza. Ridurre l'attività in background quando il dispositivo funziona a batteria e valutare se posticipare le attività non essenziali finché il dispositivo non viene collegato all'alimentazione.
// 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.
}
Annullare il lavoro in background alla chiusura dell'app
Quando l'app si arresta, annulla tutte le attività in background ancora in esecuzione usando i pattern CancellationToken. Ciò impedisce all'app di contenere le risorse di sistema dopo che non è più visibile.
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();
}
Usare le attività in background con l'identità del pacchetto
Se l'app è in pacchetto con MSIX, puoi anche registrare le attività in background eseguite in risposta ai trigger di sistema (ad esempio modifiche dello stato della rete, fusi orari o presenza dell'utente). Queste attività usano la stessa BackgroundTaskBuilder API disponibile in UWP. Per altre informazioni, vedi Supportare l'app con le attività in background.
Note
Le app pacchettizzate (MSIX) possono usare BackgroundTaskBuilder per attività avviate dal sistema. Le app desktop non in pacchetto devono usare invece modelli di threading standard .NET.