在Windows Phone 8.1 Silverlight

时间:2016-05-25 08:59:57

标签: c# silverlight windows-phone-8 windows-phone-8.1 windows-phone

我正在研究Windows Phone 8.1中提供的推送通知触发器的“功能”。我的目标是使用Windows手机Silverlight 8.1项目来完成这项工作。据我所知,它应该基于我的阅读。

2天后,我完全陷入困境。不管我在想什么。当我向我的应用发送原始通知时,我的应用程序被取消,我又回到了Windows菜单。

输出: 程序'[1852] BACKGROUNDTASKHOST.EXE'已退出代码1(0x1)。 程序'[2712] AgHost.exe'已退出代码1(0x1)。

状态:

  • 该应用会收到通知。它会触发OnPushNotificationReceived。 (此活动结束后,应用程序将被取消)
  • 宣布推送通知任务,并将入口点定义为 Push.Notification
  • 我为Windows phone 8.1创建了一个Windows运行时组件,以便运行后台任务。
  • 后台任务已妥善注册。
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个警告让我担心:

  • 我的2个项目中的流程架构不匹配。我的Windows手机项目使用“任何CPU”(不能更改)。我的windows runetime组件项目使用“ARM”。如果我使用“任何CPU”我的WinRT,我得到一个错误: / platform:anycpu32bitpreferred只能与/ t:exe,/ t:winexe和/ t:appcontainerexe
  • 一起使用
  • 两个项目的依赖程序集存在冲突。似乎是

发现同一依赖程序集的不同版本之间存在冲突。在Visual Studio中,双击此警告(或选择它并按Enter键)以修复冲突;否则,将以下绑定重定向添加到应用程序配置文件中的“runtime”节点:

提前致谢

1 个答案:

答案 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
}

希望这会帮助某人。