我刚刚从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

最佳答案

我找到了此问题的解决方案:


使运行时Windows Phone 8.1 Project成为后台任务





在后台任务项目中注册Task时:

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”


当您在应用中某个地方初始化任务时,可以使用:

BackgroundTask.YourTaskName.Register();


都是关于任务的切入点。因此,如果像完成任务那样将任务放在单独的项目下,则必须输入该项目的名称以及其下的后台任务类的名称。

不要仅对EntryPoint仅使用后台任务类名称,而必须使用包含该类的项目名称来引用它。

希望能帮助到你,

关于c# - Windows Phone 8.1后台任务无法注册后台任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28467496/

10-17 01:05