我正在开发一个WinRT Windows Phone 8.1应用程序,并且我正在尝试实施后台任务。经过大量的研究,我能够生成一个应该工作的代码,但是当我尝试运行它时,调试器退出,没有错误,只退出...我尝试使用Lifecycle Events菜单并设置时区触发器,在这两个实例上,我得到了相同的结果。
详细说明: 我使用 Windows运行时组件(Windows Phone)模板创建了一个新项目,然后将该文件编辑为一个简单的BackgroundTask:
namespace RSSReader.Tasks
{
public sealed class GetFeed
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
// Will do stuff...
}
}
}
在Package.appxmanifest上,在声明选项卡上注册,创建后台任务声明,勾选系统事件,并将入口点设置为RSSReader.Tasks.GetFeed
。
然后,在MainPage上我添加了以下内容:
private async void registerTask()
{
string taskName = "FeedChecker";
var bgAccStatus = await BackgroundExecutionManager.RequestAccessAsync();
if (bgAccStatus == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity ||
bgAccStatus == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity)
{
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == taskName)
{
return;
}
}
var builder = new BackgroundTaskBuilder();
var trigger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);
builder.Name = taskName;
builder.TaskEntryPoint = typeof(Tasks.GetFeed).FullName;
builder.SetTrigger(trigger);
var registration = builder.Register();
}
}
注册任务,但是当我更改时区时,我的应用程序已经消失,调试器退出...
答案 0 :(得分:0)
问题是方法返回。当您创建一个返回void的异步方法时,它只是发射并且忘记了,并且方法执行没有任何状态。对于需要检查执行状态的异步方法,需要将返回值从void更改为Task,并且应用程序应在触发任务后继续执行。
希望有所帮助