Aplicaciones de Windows
Contraer la tabla de contenido
Expandir la tabla de contenido

Cómo controlar una tarea en segundo plano cancelada (aplicaciones de la Tienda Windows con JavaScript y HTML)

Aprende a crear una tarea en segundo plano que reconozca solicitudes de cancelación y detenga el trabajo, y que informe de la cancelación a la aplicación a través de la instancia de tarea en segundo plano y el almacenamiento persistente.

Lo que debes saber

Tecnologías

Requisitos previos

Instrucciones

Paso 1: Usar un controlador de eventos para reconocer las solicitudes de cancelación

Escribe un método para controlar el evento de cancelación.

  1. Crea un método llamado OnCanceled que tenga la siguiente superficie. Este método es el punto de entrada al que llama Windows en tiempo de ejecución siempre que se realiza una solicitud de cancelación contra tu tarea en segundo plano.

    La función OnCanceled necesita tener la siguiente superficie:

    
    
    function onCanceled(cancelSender, cancelReason)
    {
        // TODO: Add code to notify the background task that it is cancelled.
    }
    
    
  2. Agrega una variable llamada cancel a la tarea en segundo plano. Esta se usará para indicar la recepción de una solicitud de cancelación.

    Por ejemplo, coloca esta línea de código al principio de tu clase IBackgroundTask, junto con otras definiciones de variables:

    
    var cancel = false;
    
    
  3. En el método OnCanceled que creaste en el paso 1, establece cancel en true.

    El método OnCanceled completo de la muestra de tarea en segundo plano establece cancel en true:

    
    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }
    
    
  4. Registra el método OnCanceled con la escucha de eventos "canceled" antes de empezar a trabajar en la tarea en segundo plano.

    Por ejemplo, usa la siguiente línea de código:

    
    
    backgroundTaskInstance.addEventListener("canceled", onCanceled);
    
    

Paso 2: Controlar la cancelación y salir

El método Run necesita supervisar la variable cancel, de forma que pueda salir cuando la variable se establezca en true.

  1. Modifica el código de la clase de tu tarea en segundo plano para que deje de funcionar si cancel está establecido en true.

    La muestra de tarea en segundo plano incluye una comprobación que detiene la devolución de llamada periódica al temporizador si se cancela la tarea en segundo plano:

    
    
    if (!cancel) {
        // Do work.
    }
    else
    {
        // Cancel.
    }
    
    
  2. Cuando se detenga el trabajo, establece la propiedad succeeded de la instancia de tarea en segundo plano en false para la limpieza y registra que la tarea se canceló. La llamada se cierra() para salir de la función.

    La muestra de tarea en segundo plano registra el estado en LocalSettings:

    
    
    if ((_cancelRequested == false) && (_progress < 100))
    {
        // See the background task sample for this code.
    }
    else
    {
        //
        // If the cancellation handler indicated that the task was canceled, stop the background task.
        //
        console.log("Background " + backgroundTaskInstance.task.name + " Canceled");
        backgroundTaskInstance.succeeded = false;
    
        key = backgroundTaskInstance.task.taskId.toString();
        settings.values[key] = "Canceled";
    
        close();
    }
    
    

Observaciones

Puedes descargar la muestra de tarea en segundo plano para ver estas muestras de código en contexto dentro de los métodos.

Por propósitos de ilustración, el código de muestra anterior solo muestra algunas partes de la tarea en segundo plano (y temporizador de devolución de llamadas) de la muestra de tarea en segundo plano.

Ejemplo de método Run

La tarea completa en segundo plano con JavaScript, de la muestra de tarea en segundo plano, se presenta a continuación para tengas el contexto:


//
// A JavaScript background task runs a specified JavaScript file.
//
(function () {
    "use strict";

    //
    // The background task instance's activation parameters are available via Windows.UI.WebUI.WebUIBackgroundTaskInstance.current
    //
    var cancel = false,
        progress = 0,
        backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;

    console.log("Background " + backgroundTaskInstance.task.name + " Starting...");

    //
    // Associate a cancellation handler with the background task.
    //
    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }
    backgroundTaskInstance.addEventListener("canceled", onCanceled);

    //
    // This function is set to run every 1000 milliseconds ten times and perform background task activity.
    //
    function onTimer() {
        var key = null,
            settings = Windows.Storage.ApplicationData.current.localSettings;

        if (!cancel) {
            if (progress < 100) {
                //
                // Simulate work being done.
                //
                setTimeout(onTimer, 1000);

                //
                // Indicate progress to the foreground application.
                //
                backgroundTaskInstance.progress = progress;
                progress += 10;
            } else {
                //
                // Use the succeeded property to indicate that this background task completed successfully.
                //
                backgroundTaskInstance.succeeded = true;
                backgroundTaskInstance.progress = progress;
                console.log("Background " + backgroundTaskInstance.task.name + " Completed");

                //
                // Write to localSettings to indicate that this background task completed.
                //
                key = backgroundTaskInstance.task.name;
                settings.values[key] = "Completed";

                //
                // A JavaScript background task must call close when it is done.
                //
                close();
            }
        } else {
            //
            // If the cancellation handler indicated that the task was canceled, stop the background task.
            //
            console.log("Background " + backgroundTaskInstance.task.name + " Canceled");
            backgroundTaskInstance.succeeded = false;

            key = backgroundTaskInstance.task.taskId.toString();
            settings.values[key] = "Canceled";

            close();
        }
    }

    //
    // Start the timer function to simulate background task work.
    //
    setTimeout(onTimer, 1000);
})();

Temas relacionados

Inicio rápido: creación y registro de una tarea en segundo plano
Cómo registrar una tarea en segundo plano
How to debug a background task
Dar soporte a tu aplicación mediante tareas en segundo plano
Cómo obtener una lista de tareas en segundo plano pendientes
Cómo supervisar el progreso y la finalización de tareas en segundo plano
Cómo declarar tareas en segundo plano en el manifiesto de la aplicación
Directrices y listas de comprobación para tareas en segundo plano

 

 

Mostrar:
© 2018 Microsoft