我刚从https://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9下载了示例 并尝试运行Windows Phone 8.1项目。程序运行但是即使我进行了更改以触发事件,也没有后台任务发生。我也不认为它已被注册作为后台任务运行,因为我没有收到任何将应用程序添加到锁定屏幕的请求。我无法手动将应用程序添加到锁定屏幕。 注意:使用Lumia 730和8.1牛仔布。
我还尝试用silverlight 8.1和背景作为RT组件自己编写一个示例程序。
if (BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == name))
{
// One register it once
return;
}
var builder = new BackgroundTaskBuilder();
var trigger = new SystemTrigger(SystemTriggerType.UserAway, false);
builder.Name = name;
builder.TaskEntryPoint = typeof(MyBackgroundTask.BackClass).FullName; builder.SetTrigger(trigger);
await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskRegistration registration = builder.Register();
registration.Completed += RegistrationOnCompleted;
我也在线上获得例外
BackgroundTaskRegistration registration = builder.Register();
例外是运行时状态
> A first chance exception of type 'System.Exception' occurred in
> Project1.DLL
答案 0 :(得分:2)
我找到了这个问题的解决方案:
在yor后台任务项目中注册任务时:
public async static void Register()
{
Debug.WriteLine("Registering geofence bg task");
if (!IsTaskRegistered())
{
var result = await BackgroundExecutionManager.RequestAccessAsync();
var builder = new BackgroundTaskBuilder();
builder.Name = TaskName;
builder.TaskEntryPoint = typeof(BackgroundTask.YourTaskName).FullName;
builder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence));
try
{
builder.Register();
Debug.WriteLine("GeoFence Task Registered");
}
catch (Exception ex)
{
Debug.WriteLine("GeoFence Task Failed : " + ex.Message.ToString());
}
}
else { }
}
确保通过将TaskEntryPoint引用到后台项目名称来正确添加它,它看起来像这样:“BackgroundTask.YourTaskName”
builder.Name参数的TaskName字符串应如下所示:
静态字符串TaskName =“BackgroundTask.YourTaskName”;
在声明选项卡下的appmanifest中声明你的TaskEntryPoint,这里我使用了GeofenceTask,所以我检查了任务所需的几个复选框:
在这里再次输入EntryPoint(如TaskEntryPoint):“BackgroundTask.YourTaskName”
当您在app中的某个地方初始化任务时,您可以使用:
BackgroundTask.YourTaskName.Register();
关于任务的切入点全部。因此,如果您在单独的项目下完成任务,则必须输入该项目的名称和后台任务类的名称。
不要仅为EntryPoint使用后台任务类名称,必须使用包含该类的项目名称引用它。
希望它有所帮助,
答案 1 :(得分:1)
你没有提到例外是什么,也没有提到它附带的文字。这使得很难回答。
尽管如此,假设您的错误是“未注册课程”,您需要做几件事:
MyBackgroundTask.BackClass
是Windows运行时组件项目中的一个类(它不能在您的Silverlight项目中)答案 2 :(得分:0)
我尝试在后台任务中添加BackgroundTaskDeferral并开始工作。我想知道为什么这只能确保异步调用。无论如何它对我有用。 谢谢你的帮助
答案 3 :(得分:0)
Same problem. Turned out my entry point parameter in Package.appxmanifest was spelled "Module:EntryPoint" rather than "Module.EntryPoint". Changing the colon to a period was all I had to do.