为 UWP 定义 BackgroundTask 的入口点
Define Entry Point of a BackgroundTask for UWP
我想知道如何在清单文件的声明的入口点声明要作为后台任务执行的代码的位置。
我的代码集在项目中名为 "Models" 的文件夹中,但我不知道如何引用此代码。
这里有一张它的照片:
以防万一,这是我在 cs 中的代码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
using Windows.UI.Popups;
namespace Universal_in_C.Models
{
public sealed class ExampleBackgroundTask : IBackgroundTask
{
public async Task ExampleMethodAsync()
{
Debug.WriteLine("Done Exe");
var dialog = new MessageDialog("TESTING, TESTING LIKE THERE IS NO TOMORROW.");
await dialog.ShowAsync();
}
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
await ExampleMethodAsync();
_deferral.Complete();
}
}
}
以及我如何称呼它(我知道我也需要更改此处的条目);
private void button6_Click(object sender, RoutedEventArgs e)
{
var taskRegistered = false;
var exampleTaskName = "BackgroundTask";
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == exampleTaskName)
{
taskRegistered = true;
break;
}
}
if (taskRegistered)
{
Debug.WriteLine("Already Exist");
}
else
{
var builder = new BackgroundTaskBuilder();
Debug.WriteLine("Started to Exist");
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "exampleTaskName";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, true));
builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));
builder.Register();
}
}
谢谢!
据我了解,您在清单文件中声明后台任务时遇到问题。基于此,我的回答。
- 您需要创建一个包含后台任务的新项目。这是以后正确 debug them 所必需的。
- 在您的申请中引用该项目。
- 通过实现 IBackgroundTask 接口创建任务。
- 通过代码注册。
- 在清单上注册它。
在第 5 步,入口点始终是 {project namespace}.{background task name}
,因此例如,如果您使用任务 ExampleTask
创建了项目名称 BackgroundTasks
,入口点将是: BackgroundTasks.ExampleTask
我将 link 留给 guidelines and tutorial on how to implement them 以供将来参考。
我想知道如何在清单文件的声明的入口点声明要作为后台任务执行的代码的位置。
我的代码集在项目中名为 "Models" 的文件夹中,但我不知道如何引用此代码。 这里有一张它的照片:
以防万一,这是我在 cs 中的代码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
using Windows.UI.Popups;
namespace Universal_in_C.Models
{
public sealed class ExampleBackgroundTask : IBackgroundTask
{
public async Task ExampleMethodAsync()
{
Debug.WriteLine("Done Exe");
var dialog = new MessageDialog("TESTING, TESTING LIKE THERE IS NO TOMORROW.");
await dialog.ShowAsync();
}
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
await ExampleMethodAsync();
_deferral.Complete();
}
}
}
以及我如何称呼它(我知道我也需要更改此处的条目);
private void button6_Click(object sender, RoutedEventArgs e)
{
var taskRegistered = false;
var exampleTaskName = "BackgroundTask";
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == exampleTaskName)
{
taskRegistered = true;
break;
}
}
if (taskRegistered)
{
Debug.WriteLine("Already Exist");
}
else
{
var builder = new BackgroundTaskBuilder();
Debug.WriteLine("Started to Exist");
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "exampleTaskName";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, true));
builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));
builder.Register();
}
}
谢谢!
据我了解,您在清单文件中声明后台任务时遇到问题。基于此,我的回答。
- 您需要创建一个包含后台任务的新项目。这是以后正确 debug them 所必需的。
- 在您的申请中引用该项目。
- 通过实现 IBackgroundTask 接口创建任务。
- 通过代码注册。
- 在清单上注册它。
在第 5 步,入口点始终是 {project namespace}.{background task name}
,因此例如,如果您使用任务 ExampleTask
创建了项目名称 BackgroundTasks
,入口点将是: BackgroundTasks.ExampleTask
我将 link 留给 guidelines and tutorial on how to implement them 以供将来参考。