开发手册 欢迎您!
软件开发者资料库

Windows10开发 - 后台执行

Windows 10开发后台执行 - 从简介,UWP,第一个应用程序,存储,XAML控件,数据绑定,XAML性能,自适应设计,自适应UI,自适应代码,文件管理,SQLite数据库,简单而简单的步骤学习Windows 10开发App to App Communication,App Localization,App Lifecycle,Background Execution,App Services,Web Platform,Connected Experience,Navigation,Networking,Cloud Services,Live Tiles,Sharing Contract,Porting to Windows。

通用Windows平台(UWP)引入了新机制,允许应用程序在应用程序未在前台运行时执行某些功能. UWP还增加了应用程序在后台延长执行时间的能力后台任务和触发器.后台执行是应用程序生命周期的真正补充尾部.

后台任务的重要功能是 :

  • 后台任务由系统或时间事件触发,可以受到一个或多个条件的约束.

  • 当后台任务时触发,其关联的处理程序运行并执行后台任务的工作.

  • 即使注册后台任务的应用程序被暂停,后台任务也可以运行.

  • 它们是标准应用程序平台的一部分,实质上是为应用程序提供注册系统事件(触发器)的能力.当该事件发生时,它们在后台运行预定义的代码块.系统触发器包括诸如网络连接或系统时区更改等事件.

  • 后台执行无法保证,因此不适用于关键功能和功能.

  • 操作系统对可以同时运行多少后台任务有一定的限制.因此,即使触发触发器并满足条件,任务仍然无法运行.

创建和注册后台任务

创建后台任务类并将其注册为在您的应用不在前台时运行.您可以通过编写实现 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文件中添加一个按钮.

              

  • 以下是按钮点击事件实施,其中后台任务已注册.

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 {    ///        /// An empty page that can be used on its own or navigated to within a Frame.    ///    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)并将名称背景内容提供给该项目.

背景资料

  • 下面给出的是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 项目中访问,右键单击参考>在解决方案资源管理器中添加引用并添加 BackgroundStuff 项目.

背景资料Sec

  • 现在,让我们转到 UWPBackgroundDemo 项目的.appxmanifest 文件,并在声明标签中添加以下信息.

背景材料

  • 首先构建Background stuff项目,然后构建并执行 UWPBackgroundDemo 项目.

  • 编译并执行上述代码后,您将看到以下窗口.

背景资料

  • 单击按钮时,它将运行后台任务,并在窗口的右端显示通知.