Windows10 Dev - การดำเนินการเบื้องหลัง

แพลตฟอร์ม Universal Windows (UWP) แนะนำกลไกใหม่ซึ่งช่วยให้แอปพลิเคชันทำงานบางอย่างได้ในขณะที่แอปพลิเคชันไม่ได้ทำงานอยู่เบื้องหน้า UWP ยังเพิ่มความสามารถของแอปพลิเคชันในการขยายเวลาการดำเนินการในพื้นหลังสำหรับBackground Tasks and Triggers. การดำเนินการเบื้องหลังเป็นส่วนเสริมที่แท้จริงของวงจรชีวิตของแอปพลิเคชัน

คุณสมบัติที่สำคัญของงานเบื้องหลัง ได้แก่ -

  • งานเบื้องหลังถูกทริกเกอร์โดยระบบหรือเหตุการณ์เวลาและสามารถถูก จำกัด โดยเงื่อนไขอย่างน้อยหนึ่งข้อ

  • เมื่องานเบื้องหลังถูกทริกเกอร์ตัวจัดการที่เกี่ยวข้องจะรันและดำเนินการกับงานเบื้องหลัง

  • งานพื้นหลังสามารถทำงานได้แม้ว่าแอปที่ลงทะเบียนงานพื้นหลังจะถูกระงับ

  • เป็นส่วนหนึ่งของแพลตฟอร์มแอปพลิเคชันมาตรฐานและโดยพื้นฐานแล้วจะให้แอปที่มีความสามารถในการลงทะเบียนสำหรับเหตุการณ์ของระบบ (ทริกเกอร์) เมื่อเหตุการณ์นั้นเกิดขึ้นพวกเขาจะเรียกใช้บล็อกโค้ดที่กำหนดไว้ล่วงหน้าในพื้นหลัง ทริกเกอร์ของระบบรวมถึงเหตุการณ์ต่างๆเช่นการเปลี่ยนแปลงในการเชื่อมต่อเครือข่ายหรือเขตเวลาของระบบ

  • ไม่รับประกันการดำเนินการเบื้องหลังดังนั้นจึงไม่เหมาะสำหรับฟังก์ชันและคุณสมบัติที่สำคัญ

  • ระบบปฏิบัติการมีข้อ จำกัด เกี่ยวกับจำนวนงานเบื้องหลังที่สามารถทำงานได้ในเวลาเดียวกัน ดังนั้นแม้ว่าทริกเกอร์จะเริ่มทำงานและตรงตามเงื่อนไข แต่งานก็ยังไม่สามารถรันได้

สร้างและลงทะเบียนงานเบื้องหลัง

สร้างคลาสงานพื้นหลังและลงทะเบียนให้ทำงานเมื่อแอปของคุณไม่ได้อยู่เบื้องหน้า คุณสามารถรันโค้ดในพื้นหลังได้โดยเขียนคลาสที่ใช้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

<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 Runtime Component (Universal 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 ใน Solution Explorer และเพิ่ม BackgroundStuff โครงการ.

  • ตอนนี้ให้เราไปที่ Package.appxmanifest ไฟล์ของ UWPBackgroundDemo โครงการและเพิ่มข้อมูลต่อไปนี้ในแท็บการประกาศ

  • ขั้นแรกให้สร้างโครงการสิ่งที่เป็นพื้นหลังจากนั้นสร้างและดำเนินการไฟล์ UWPBackgroundDemo โครงการ.

  • เมื่อโค้ดด้านบนถูกคอมไพล์และรันคุณจะเห็นหน้าต่างต่อไปนี้

  • เมื่อคุณคลิกไฟล์ buttonมันจะเรียกใช้งานพื้นหลังและจะแสดงการแจ้งเตือนที่ด้านขวาสุดของหน้าต่างของคุณ