Windows10 Dev - Exécution en arrière-plan

La plateforme Windows universelle (UWP) introduit de nouveaux mécanismes, qui permettent aux applications d'exécuter certaines fonctionnalités alors que l'application ne s'exécute pas au premier plan. UWP augmente également la capacité des applications à prolonger leur temps d'exécution en arrière-plan pourBackground Tasks and Triggers. L'exécution en arrière-plan est la véritable queue complémentaire du cycle de vie de l'application.

Les caractéristiques importantes des tâches en arrière-plan sont:

  • Une tâche d'arrière-plan est déclenchée par un événement système ou temporel et peut être contrainte par une ou plusieurs conditions.

  • Lorsqu'une tâche en arrière-plan est déclenchée, son gestionnaire associé s'exécute et effectue le travail de la tâche en arrière-plan.

  • Une tâche en arrière-plan peut s'exécuter même lorsque l'application qui a enregistré la tâche en arrière-plan est suspendue.

  • Ils font partie de la plate-forme d'application standard et fournissent essentiellement une application avec la possibilité de s'inscrire à un événement système (déclencheur). Lorsque cet événement se produit, ils exécutent un bloc de code prédéfini en arrière-plan. Les déclencheurs système incluent des événements tels que des modifications de la connectivité réseau ou du fuseau horaire du système.

  • L'exécution en arrière-plan n'est pas garantie, elle n'est donc pas adaptée aux fonctions et fonctionnalités critiques.

  • Le système d'exploitation a une limitation quant au nombre de tâches d'arrière-plan pouvant être exécutées en même temps. Ainsi, même lorsque le déclencheur est déclenché et que les conditions sont remplies, la tâche ne peut toujours pas s'exécuter.

Créer et enregistrer une tâche d'arrière-plan

Créez une classe de tâches en arrière-plan et enregistrez-la pour qu'elle s'exécute lorsque votre application n'est pas au premier plan. Vous pouvez exécuter du code en arrière-plan en écrivant des classes qui implémentent leIBackgroundTaskinterface. L'exemple de code suivant montre un point de départ très basique pour une classe de tâches en arrière-plan.

public sealed class MyBackgroundTask : IBackgroundTask { 
   public void Run(IBackgroundTaskInstance taskInstance){ 
      // write code 
   } 
}

Vous pouvez demander l'accès pour la tâche d'arrière-plan comme suit.

var access = await BackgroundExecutionManager.RequestAccessAsync();
 
switch (access) {
 
   case BackgroundAccessStatus.Unspecified: 
      break; 
   case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity: 
      break; 
   case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity: 
      break; 
   case BackgroundAccessStatus.Denied: 
      break; 
   default: 
      break; 
}

Pour créer et enregistrer la tâche en arrière-plan, utilisez le code suivant.

var task = new BackgroundTaskBuilder {
   Name = "My Task", 
   TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString() 
}; 

var trigger = new ApplicationTrigger(); 
task.SetTrigger(trigger);  
task.Register(); 
 
await trigger.RequestAsync();

Comprenons un exemple simple de tâche d'arrière-plan en suivant toutes les étapes ci-dessous.

  • Créer un nouveau projet UWP vierge ‘UWPBackgroundDemo’ et ajoutez un bouton dans le fichier XAML.

<Page 
   x:Class = "UWPBackgroundDemo.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:UWPBackgroundDemo" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d"> 
	
   <Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
      <Button x:Name = "button" Content = "Button" 
         HorizontalAlignment = "Left" Margin = "159,288,0,0" 
         VerticalAlignment = "Top" Click = "button_Click"/> 
   </Grid>
	
</Page>
  • Ci-dessous est le button click implémentation d'événement dans laquelle la tâche d'arrière-plan est enregistrée.

using System; 

using Windows.ApplicationModel.Background; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
 
// The Blank Page item template is documented at 
   http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409  

namespace UWPBackgroundDemo {
 
   /// <summary> 
      /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary>
	
   public sealed partial class MainPage : Page {

      public MainPage() {
         this.InitializeComponent(); 
      }  
		
      private async void button_Click(object sender, RoutedEventArgs e) {
         var access = await BackgroundExecutionManager.RequestAccessAsync(); 
		 
         switch (access){ 
            case BackgroundAccessStatus.Unspecified: 
               break; 
            case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity: 
               break; 
            case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity: 
               break; 
            case BackgroundAccessStatus.Denied: 
               break; 
            default: 
               break; 
         } 
			
         var task = new BackgroundTaskBuilder {  
            Name = "My Task", 
            TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString() 
         }; 
			
         var trigger = new ApplicationTrigger(); 
         task.SetTrigger(trigger);  
			
         var condition = new SystemCondition(SystemConditionType.InternetAvailable);  
         task.Register(); 
			
         await trigger.RequestAsync(); 
      } 
   } 
}
  • Maintenant, créez un autre projet, mais cette fois, sélectionnez Windows Runtime Component (Universal Windows) dans le menu et donnez le nom Background stuff à ce projet.

  • Ci-dessous le code C #. qui contientMyBackgroundTask l'implantation de classe et il exécutera la tâche d'arrière-plan.

using Windows.ApplicationModel.Background; 
using Windows.UI.Notifications; 
 
namespace BackgroundStuff { 
   public sealed class MyBackgroundTask : IBackgroundTask { 
	
      public void Run(IBackgroundTaskInstance taskInstance) {
         SendToast("Hi this is background Task"); 
      } 
		
      public static void SendToast(string message) { 
         var template = ToastTemplateType.ToastText01; 
         var xml = ToastNotificationManager.GetTemplateContent(template); 
         var elements = xml.GetElementsByTagName("Test"); 
         var text = xml.CreateTextNode(message); 
			
         elements[0].AppendChild(text); 
         var toast = new ToastNotification(xml); 
         ToastNotificationManager.CreateToastNotifier().Show(toast); 
      } 
   } 
}
  • Pour rendre ce projet accessible dans le UWPBackgroundDemo projet, clic droit sur References > Add References dans l'Explorateur de solutions et ajoutez BackgroundStuff projet.

  • Maintenant, allons à la Package.appxmanifest dossier de UWPBackgroundDemo projet et ajoutez les informations suivantes dans l'onglet Déclarations.

  • Créez d'abord le projet Background stuff, puis créez et exécutez le UWPBackgroundDemo projet.

  • Lorsque le code ci-dessus est compilé et exécuté, vous verrez la fenêtre suivante.

  • Lorsque vous cliquez sur le button, il exécutera la tâche d'arrière-plan et affichera une notification à l'extrémité droite de votre fenêtre.