Pregunta

Estoy tratando de registrar una tarea en segundo plano y me estoy poniendo algún comportamiento extraño.Me parece que la tarea en sí, es la de registrar y disparar en el momento justo;sin embargo, cuando se hace fuego es el cierre de mi programa (sin error).

Sospecho que la razón está relacionada con el hecho de que el programa no se me pide es que me quiero permitir una tarea en segundo plano para que se ejecute al iniciar.He creado una declaración para la tarea en segundo plano como un evento en el sistema, y estoy registrarse como este de la Aplicación.Xaml.cs:

var builder = new BackgroundTaskBuilder();

builder.Name = "NewTask";
builder.TaskEntryPoint = "ConnectionMonitor.CheckInternet";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));

BackgroundTaskRegistration task = builder.Register();

Así que, creo que mi pregunta es:¿por qué no me piden permiso para ejecutar una tarea en segundo plano (que supongo que me va a dar la respuesta a mi problema principal de por qué es un bloqueo)?

No estoy seguro si importa, pero este Windows es una aplicación Universal (la aplicación.xaml.cs anteriormente está en la Shared proyecto.

La tarea se parece a esto:

BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

bool newConnected = IsConnected();
if (connected != newConnected)
{
    connected = newConnected;
    var notifier = ToastNotificationManager.CreateToastNotifier();
    var template = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    var element = template.GetElementsByTagName("text")[0];
    element.AppendChild(template.CreateTextNode(connected ? "Connection available" : "Connection lost"));

    var toast = new ToastNotification(template);
    notifier.Show(toast);  
}

_deferral.Complete();
¿Fue útil?

Solución

Le preguntó: ¿por qué no me piden permiso para ejecutar una tarea en segundo plano?

La respuesta es, a menos que su tarea en segundo plano requiere de la pantalla de bloqueo de acceso, no requieren el permiso del usuario para ser registrado.No hay ningún mensaje para el usuario, por su diseño.Una de las intenciones de este diseño es que permite que usted se registre una tarea de otra tarea.

En Windows, usted no necesita llamar BackgroundExecutionManager.RequestAccessAsync() excepto para la pantalla de bloqueo de acceso.Llamar a esto le dará más cuota pero será necesario que el usuario apruebe la tarea.

En Windows Phone, llamada RequestAccessAsync() es necesario no importa qué, pero nunca le pedirá al usuario con una interfaz de usuario.Por esta razón la lógica en su Aplicación Universal puede ser compartido, pero probablemente tendrá un #if para manejar el registro de manera diferente, si es pertinente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top