Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las tareas en segundo plano permiten que la aplicación ejecute código cuando la aplicación no esté en primer plano. En una aplicación de SDK de Aplicaciones para Windows de escritorio, la actividad en segundo plano tiene más flexibilidad que en las aplicaciones para UWP, pero aún debe administrarla de forma responsable para garantizar una buena experiencia para los usuarios.
Importante
Las aplicaciones de SDK de Aplicaciones para Windows de escritorio no están sujetas a las mismas restricciones de ejecución en segundo plano que las aplicaciones para UWP. Las aplicaciones de escritorio pueden ejecutar subprocesos en segundo plano libremente, mantener tareas de ejecución prolongada y usar patrones estándar de subprocesos .NET. Sin embargo, ser un buen ciudadano del sistema significa minimizar el trabajo innecesario cuando el usuario no usa activamente la aplicación.
Procedimientos recomendados para la actividad en segundo plano
Siga estas instrucciones para mantener la aplicación eficaz:
Reducir el trabajo cuando el usuario no interactúa con la aplicación
Cuando el usuario cambia a otra aplicación o minimiza la ventana, reduzca la frecuencia de temporizadores, sondeos de red y otro trabajo en segundo plano. Esto conserva la batería y libera recursos del sistema para la aplicación con la que el usuario está trabajando activamente.
Uso de patrones de programación eficaces
Utilice la programación basada en temporizadores en lugar de bucles de sondeo intensivo. Para el trabajo periódico, use DispatcherTimer o System.Threading.Timer con intervalos adecuados para su escenario.
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);
}
}
Respuesta a los estados de alimentación y batería
Compruebe el estado de energía del sistema y ajuste el comportamiento de la aplicación en consecuencia. Reduzca la actividad en segundo plano cuando el dispositivo se ejecute en la batería y considere la posibilidad de aplazar el trabajo no esencial hasta que el dispositivo esté conectado.
// 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.
}
Cancelar el trabajo en segundo plano cuando se cierra la aplicación
Cuando la aplicación se cierre, cancela las tareas en segundo plano restantes usando patrones CancellationToken. Esto impide que la aplicación contenga recursos del sistema después de que ya no esté visible.
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();
}
Uso de tareas en segundo plano con la identidad del paquete
Si la aplicación se empaqueta con MSIX, también puede registrar tareas en segundo plano que se ejecutan en respuesta a los desencadenadores del sistema (como cambios de estado de red, zonas horarias o presencia del usuario). Estas tareas usan la misma BackgroundTaskBuilder API disponible en UWP. Para obtener más información, consulta Compatibilidad con la aplicación con tareas en segundo plano.
Note
Las aplicaciones empaquetadas (MSIX) pueden usar BackgroundTaskBuilder para tareas iniciadas por el sistema. Las aplicaciones de escritorio no empaquetadas deben usar en su lugar los patrones estándar de subprocesamiento de .NET.