Eseguire un'attività in background quando l'app UWP viene aggiornataRun a background task when your UWP app is updated

Informazioni su come scrivere un'attività in background che viene eseguita dopo l'aggiornamento dell'app di archivio piattaforma UWP (Universal Windows Platform) (UWP).Learn how to write a background task that runs after your Universal Windows Platform (UWP) store app is updated.

L'attività Aggiorna in background dell'attività viene richiamata dal sistema operativo dopo che l'utente ha installato un aggiornamento a un'app installata nel dispositivo.The Update Task background task is invoked by the operating system after the user installs an update to an app that is installed on the device. Ciò consente all'app di eseguire attività di inizializzazione, ad esempio l'inizializzazione di un nuovo canale di notifica push, l'aggiornamento dello schema del database e così via, prima che l'utente avvii l'app aggiornata.This allows your app to perform initialization tasks such as initializing a new push notification channel, updating database schema, and so on, before the user launches your updated app.

L'attività di aggiornamento differisce dall'avvio di un'attività in background con il trigger ServicingComplete , perché in questo caso l'app deve essere eseguita almeno una volta prima dell'aggiornamento per poter registrare l'attività in background che verrà attivata dal trigger ServicingComplete .The Update Task differs from launching a background task using the ServicingComplete trigger because in that case your app must run at least once before it is updated in order to register the background task that will be activated by the ServicingComplete trigger. L'attività di aggiornamento non è registrata e quindi un'app che non è mai stata eseguita, ma di cui è stato eseguito l'aggiornamento, avrà ancora l'attività di aggiornamento attivata.The Update Task isn't registered and so an app that has never been run, but that is upgraded, will still have its update task triggered.

Passaggio 1: creare la classe di attività in backgroundStep 1: Create the background task class

Come per gli altri tipi di attività in background, l'attività Aggiorna in background dell'attività viene implementata come componente Windows Runtime.As with other types of background tasks, you implement the Update Task background task as a Windows Runtime component. Per creare questo componente, attenersi alla procedura descritta nella sezione creare una classe di attività in background di creare e registrare un'attività in background out-of-process.To create this component, follow the steps in the Create the Background Task class section of Create and register an out-of-process background task. I passaggi includono:The steps include:

  • Aggiunta di un progetto di componente Windows Runtime alla soluzione.Adding a Windows Runtime component project to your solution.
  • Creazione di un riferimento dall'app al componente.Creating a reference from your app to the component.
  • Creazione di una classe pubblica sealed nel componente che implementa IBackgroundTask.Creating a public, sealed class in the component that implements IBackgroundTask.
  • Implementazione del metodo Run , che è il punto di ingresso obbligatorio chiamato quando viene eseguita l'attività Update.Implementing the Run method, which is the required entry point that is called when the Update Task is run. Se si intende eseguire chiamate asincrone dall'attività in background, creare e registrare un'attività in background out-of-process illustra come usare un rinvio nel metodo Run .If you are going to make asynchronous calls from your background task, Create and register an out-of-process background task explains how to use a deferral in your Run method.

Non è necessario registrare questa attività in background (la sezione "registrare l'attività in background per l'esecuzione" nell'argomento creare e registrare un'attività in background out-of-process ) per usare l'attività di aggiornamento.You don't need to register this background task (the "Register the background task to run" section in the Create and register an out-of-process background task topic) to use the Update Task. Questo è il motivo principale per cui si usa un'attività di aggiornamento perché non è necessario aggiungere codice all'app per registrare l'attività e l'app non deve essere almeno eseguita una volta prima dell'aggiornamento per registrare l'attività in background.This is the main reason to use an Update Task because you don't need to add any code to your app to register the task and the app doesn't have to at least run once before being updated to register the background task.

Il codice di esempio seguente mostra un punto di partenza di base per una classe di attività in background dell'attività di aggiornamento in C#.The following sample code shows a basic starting point for a Update Task background task class in C#. La classe dell'attività in background e tutte le altre classi nel progetto di attività in background devono essere pubbliche e sealed.The background task class itself - and all other classes in the background task project - need to be public and sealed. La classe dell'attività in background deve derivare da IBackgroundTask e avere un metodo Run () pubblico con la firma riportata di seguito:Your background task class must derive from IBackgroundTask and have a public Run() method with the signature shown below:

using Windows.ApplicationModel.Background;

namespace BackgroundTasks
{
    public sealed class UpdateTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // your app migration/update code here
        }
    }
}

Passaggio 2: dichiarare l'attività in background nel manifesto del pacchettoStep 2: Declare your background task in the package manifest

Nel Esplora soluzioni di Visual Studio fare clic con il pulsante destro del mouse su Package. appxmanifest e scegliere Visualizza codice per visualizzare il manifesto del pacchetto.In the Visual Studio Solution Explorer, right-click Package.appxmanifest and click View Code to view the package manifest. Aggiungere il <Extensions> codice XML seguente per dichiarare l'attività di aggiornamento:Add the following <Extensions> XML to declare your update task:

<Package ...>
    ...
  <Applications>  
    <Application ...>  
        ...
      <Extensions>  
        <Extension Category="windows.updateTask"  EntryPoint="BackgroundTasks.UpdateTask">  
        </Extension>  
      </Extensions>

    </Application>  
  </Applications>  
</Package>

Nel codice XML precedente assicurarsi che l' EntryPoint attributo sia impostato sullo spazio dei nomi. Class nome della classe dell'attività di aggiornamento.In the XML above, ensure that the EntryPoint attribute is set to the namespace.class name of your update task class. Per il nome è prevista la distinzione tra maiuscole e minuscole.The name is case-sensitive.

Passaggio 3: eseguire il debug e testare l'attività di aggiornamentoStep 3: Debug/test your Update task

Assicurarsi di aver distribuito l'app nel computer in modo da aggiornare.Ensure that you have deployed your app to your machine so that there is something to update.

Impostare un punto di interruzione nel metodo Run () dell'attività in background.Set a breakpoint in the Run() method of your background task.

Imposta punto di interruzione

Quindi, in Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto dell'app (non sul progetto attività in background), quindi scegliere Proprietà.Next, in the solution explorer, right-click your app's project (not the background task project) and then click Properties. Nella Finestra Proprietà dell'applicazione fare clic su debug a sinistra, quindi selezionare non avviare, ma eseguire il debug del codice all'avvio:In the application Properties window, click Debug on the left, then select Do not launch, but debug my code when it starts:

imposta impostazioni di debug

Quindi, per assicurarsi che il UpdateTask venga attivato, aumentare il numero di versione del pacchetto.Next, to ensure that the UpdateTask is triggered, increase the package's version number. Nel Esplora soluzioni fare doppio clic sul file Package. appxmanifest dell'app per aprire la finestra di progettazione del pacchetto e quindi aggiornare il numero di Build :In the Solution Explorer, double-click your app's Package.appxmanifest file to open the package designer, and then update the Build number:

aggiornare la versione

A questo punto, in Visual Studio 2019 quando si preme F5, l'app verrà aggiornata e il sistema attiverà il componente UpdateTask in background.Now, in Visual Studio 2019 when you press F5, your app will be updated and the system will activate your UpdateTask component in the background. Il debugger si collegherà automaticamente al processo in background.The debugger will automatically attach to the background process. Il punto di interruzione viene raggiunto ed è possibile scorrere la logica del codice di aggiornamento.Your breakpoint will get hit and you can step through your update code logic.

Al termine dell'attività in background, è possibile avviare l'app in primo piano dal menu Start di Windows all'interno della stessa sessione di debug.When the background task completes, you can launch the foreground app from the Windows start menu within the same debug session. Il debugger verrà nuovamente collegato automaticamente, questa volta al processo in primo piano ed è possibile esaminare la logica dell'applicazione.The debugger will again automatically attach, this time to your foreground process, and you can step through your app's logic.

Nota

Utenti di Visual Studio 2015: i passaggi precedenti si applicano a Visual Studio 2017 o a Visual Studio 2019.Visual Studio 2015 users: The above steps apply to Visual Studio 2017 or Visual Studio 2019. Se si usa Visual Studio 2015, è possibile usare le stesse tecniche per attivare e testare il UpdateTask, ad eccezione del fatto che Visual Studio non si connette ad esso.If you are using Visual Studio 2015, you can use the same techniques to trigger and test the UpdateTask, except Visual Studio will not attach to it. Una procedura alternativa in Visual Studio 2015 consiste nel configurare un ApplicationTrigger che imposta il UpdateTask come punto di ingresso e attivare l'esecuzione direttamente dall'app in primo piano.An alternative procedure in VS 2015 is to setup an ApplicationTrigger that sets the UpdateTask as its Entry Point, and trigger the execution directly from the foreground app.

Vedere ancheSee also

Creare e registrare un'attività in background out-of-processCreate and register an out-of-process background task