我正在研究Windows Phone 8.1中提供的推送通知触发器的“功能”。我的目标是使用Windows手机Silverlight 8.1项目来完成这项工作。据我所知,它应该基于我的阅读。
2天后,我完全陷入困境。不管我在想什么。当我向我的应用发送原始通知时,我的应用程序被取消,我又回到了Windows菜单。
输出: 程序'[1852] BACKGROUNDTASKHOST.EXE'已退出代码1(0x1)。 程序'[2712] AgHost.exe'已退出代码1(0x1)。
状态:
private async void RegisterBackgroundTask()
{
UnregisterBackgroundTask(taskName);
BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync();
if (backgroundStatus != BackgroundAccessStatus.Denied && backgroundStatus != BackgroundAccessStatus.Unspecified)
{
try
{
BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskName;
PushNotificationTrigger trigger = new PushNotificationTrigger();
taskBuilder.SetTrigger(trigger);
taskBuilder.TaskEntryPoint = "Push.Notification";
BackgroundTaskRegistration task = taskBuilder.Register();
}
catch (Exception ex)
{ }
}
}
public sealed class Notification
{
public void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("Background starting...");
Debug.WriteLine("Background completed!");
}
}
我不清楚我做错了什么。 是否有人使其有效? (不是理论上的) 有关信息,我有2个警告让我担心:
发现同一依赖程序集的不同版本之间存在冲突。在Visual Studio中,双击此警告(或选择它并按Enter键)以修复冲突;否则,将以下绑定重定向添加到应用程序配置文件中的“runtime”节点:
提前致谢
答案 0 :(得分:1)
我终于让它成功了。
我的初始代码出错了,我忘了实施IBackgroundTask:
public sealed class Notification : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("Background starting...");
Debug.WriteLine("Background completed!");
}
}
我不得不让我的任务异步......
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
// perform your async task and then call deferral complete
await Test();
deferral.Complete();
}
private static async Task Test()
{
//TODO with an await
}
希望这会帮助某人。