Windows10Dev-バックグラウンド実行

ユニバーサルWindowsプラットフォーム(UWP)は、アプリケーションがフォアグラウンドで実行されていないときにアプリケーションが一部の機能を実行できるようにする新しいメカニズムを導入しています。UWPは、アプリケーションがバックグラウンドで実行時間を延長する機能も向上させます。Background Tasks and Triggers。バックグラウンド実行は、アプリケーションライフサイクルの真の補完的なテールです。

バックグラウンドタスクの重要な機能は次のとおりです。

  • バックグラウンドタスクは、システムまたはタイムイベントによってトリガーされ、1つ以上の条件によって制約される可能性があります。

  • バックグラウンドタスクがトリガーされると、関連するハンドラーが実行され、バックグラウンドタスクの作業が実行されます。

  • バックグラウンドタスクを登録したアプリが停止している場合でも、バックグラウンドタスクを実行できます。

  • これらは標準のアプリケーションプラットフォームの一部であり、基本的にアプリにシステムイベント(トリガー)に登録する機能を提供します。そのイベントが発生すると、事前定義されたコードブロックがバックグラウンドで実行されます。システムトリガーには、ネットワーク接続やシステムタイムゾーンの変更などのイベントが含まれます。

  • バックグラウンド実行は保証されていないため、重要な機能や機能には適していません。

  • OSには、同時に実行できるバックグラウンドタスクの数に制限があります。したがって、トリガーが起動されて条件が満たされた場合でも、タスクは実行できません。

バックグラウンドタスクの作成と登録

バックグラウンドタスククラスを作成し、アプリがフォアグラウンドにないときに実行するように登録します。を実装するクラスを作成することにより、バックグラウンドでコードを実行できます。IBackgroundTaskインターフェース。次のサンプルコードは、バックグラウンドタスククラスの非常に基本的な開始点を示しています。

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

次のように、バックグラウンドタスクへのアクセスを要求できます。

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);  
task.Register(); 
 
await trigger.RequestAsync();

以下のすべての手順に従って、バックグラウンドタスクの簡単な例を理解しましょう。

  • 新しい空のUWPプロジェクトを作成する ‘UWPBackgroundDemo’ XAMLファイルにボタンを1つ追加します。

<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>
  • 以下は button click バックグラウンドタスクが登録されるイベントの実装。

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(); 
      } 
   } 
}
  • 次に別のプロジェクトを作成しますが、今回はメニューからWindowsランタイムコンポーネント(ユニバーサルWindows)を選択し、名前を付けます Background stuff このプロジェクトに。

  • 以下にC#コードを示します。を含むMyBackgroundTask クラスの埋め込みとそれはバックグラウンドタスクを実行します。

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); 
      } 
   } 
}
  • このプロジェクトにアクセスできるようにするには UWPBackgroundDemo プロジェクト、右クリック References > Add References ソリューションエクスプローラーで追加します BackgroundStuff 事業。

  • さて、に行きましょう Package.appxmanifest のファイル UWPBackgroundDemo プロジェクトを作成し、[宣言]タブに次の情報を追加します。

  • 最初にBackgroundstuffプロジェクトをビルドし、次にビルドして実行します UWPBackgroundDemo 事業。

  • 上記のコードをコンパイルして実行すると、次のウィンドウが表示されます。

  • クリックすると button、バックグラウンドタスクを実行し、ウィンドウの右端に通知を表示します。