不能注册时间触发后台任务 [英] Can't register a Time triggered Background Task

查看:140
本文介绍了不能注册时间触发后台任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有关Windows 8应用,在C#/ XAML中我尝试注册一个后台任务。这很难说,但我想我的后台任务非常registred但是当我点击上调试工具栏的位置我的背景任务的名称我的应用程序停止,没有任何消息的工作。



我看着日志上的事件查看器和我得到:与切入点MyApp.Pages.SampleBackgroundTask和名称,例如每小时后台任务后台任务失败,以激活。错误代码0x80010008



下面是我的代码:

 私人异步无效Button_Click_BackgroundTask(对象发件人,RoutedEventArgs E)
{
字符串为entryPoint =MyApp.Pages.SampleBackgroundTask;
串TASKNAME =实例每小时后台任务;
TimeTrigger hourlyTrigger =新TimeTrigger(60,FALSE);

BackgroundTaskRegistration myBackGroundTaskRegistration = RegisterBackgroundTask(为entryPoint,TASKNAME,hourlyTrigger,NULL);
如果(!myBackGroundTaskRegistration = NULL)
AttachProgressAndCompletedHandlers(myBackGroundTaskRegistration);
}


公共静态BackgroundTaskRegistration RegisterBackgroundTask(字符串taskEntryPoint,
字符串名称,
IBackgroundTrigger触发,
IBackgroundCondition条件)
{

VAR taskRegistered = FALSE;
VAR ITER = Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTask​​s;

的foreach(ITER中VAR项)
{
变种任务= item.Value;
如果(task.Name ==名)
{
taskRegistered = TRUE;
返回item.Value为BackgroundTaskRegistration;
}
}


变种建设者=新BackgroundTaskBuilder();

builder.Name =名称;
builder.TaskEntryPoint = taskEntryPoint;
builder.SetTrigger(触发);

如果(条件!= NULL)
{

builder.AddCondition(条件);
}

BackgroundTaskRegistration taskBack = builder.Register();

返回taskBack;
}


私人无效AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration任务)
{
task.Progress + =新BackgroundTaskProgressEventHandler(OnProgress);
task.Completed + =新BackgroundTaskCompletedEventHandler(OnCompleted);
}


私人无效OnProgress(IBackgroundTaskRegistration任务,BackgroundTaskProgressEventArgs参数)
{
VAR进度=进步+ args.Progress +%

}


私人无效OnCompleted(IBackgroundTaskRegistration任务,BackgroundTaskCompletedEventArgs参数)
{
的Debug.WriteLine(你好);
}



我添加了这个在清单:

 <扩展分类=windows.backgroundTasks入口点=MyApp.Pages.SampleBackgroundTask> 
< BackgroundTasks>
<任务类型=计时器/>
< / BackgroundTasks>
< /扩展>



难道我忘了什么东西?



感谢您的帮助。



编辑:这是我的任务的代码,一个在我项目页面:

 公共密封类SampleBackgroundTask:IBackgroundTask 
{
公共无效运行(IBackgroundTaskInstance的TaskInstance)
{
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

_deferral.Complete();
}
}


解决方案

我有这个问题了。我也有我在同一个项目。我终于得到它通过移动任务到一个单独的项目工作。我不得不设置项目输出窗口运行时组件(属性应用程序了标签下)。另外不要忘记添加项目作为参考。


For a Windows 8 App, in C#/Xaml I try to register a background task. It's hard to tell but I guess my background task is well registred but when I click on the name of my background task on the Debug Location Toolbar my app stops working without any message.

I looked at the log on the Event Viewer and I get : "The background task with entry point MyApp.Pages.SampleBackgroundTask and name Example hourly background task failed to activate with error code 0x80010008."

Here is my code :

   private async void Button_Click_BackgroundTask(object sender, RoutedEventArgs e)
    {
        string entryPoint = "MyApp.Pages.SampleBackgroundTask";
        string taskName = "Example hourly background task";
        TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

        BackgroundTaskRegistration myBackGroundTaskRegistration =   RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, null);
        if(myBackGroundTaskRegistration != null)
        AttachProgressAndCompletedHandlers(myBackGroundTaskRegistration);
    }


   public static BackgroundTaskRegistration RegisterBackgroundTask(String taskEntryPoint,
                                                                    String name,
                                                                    IBackgroundTrigger trigger,
                                                                    IBackgroundCondition condition)
    {

        var taskRegistered = false;
        var iter = Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks;

        foreach (var item in iter)
        {
            var task = item.Value;
            if (task.Name == name)
            {
                taskRegistered = true;
                return item.Value as BackgroundTaskRegistration;
            }
        }


        var builder = new BackgroundTaskBuilder();

        builder.Name = name;
        builder.TaskEntryPoint = taskEntryPoint;
        builder.SetTrigger(trigger);

        if (condition != null)
        {

            builder.AddCondition(condition);
        }

        BackgroundTaskRegistration taskBack = builder.Register();

        return taskBack;
    }


       private void AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task)
    {
        task.Progress += new BackgroundTaskProgressEventHandler(OnProgress);
        task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted);
    }


  private void OnProgress(IBackgroundTaskRegistration task, BackgroundTaskProgressEventArgs args)
    {
        var progress = "Progress: " + args.Progress + "%";

    }


    private void OnCompleted(IBackgroundTaskRegistration task, BackgroundTaskCompletedEventArgs args)
    {
        Debug.WriteLine("Hi");
    }

I added this in the manifest :

      <Extension Category="windows.backgroundTasks" EntryPoint="MyApp.Pages.SampleBackgroundTask">
      <BackgroundTasks>
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>

Did I forget something?

Thank you for your help.

EDIT : here is the code of my Task, within one of my project page :

      public sealed class SampleBackgroundTask : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

        _deferral.Complete();
    }
}

解决方案

I had this problem too. I also had mine in the same project. I finally got it to work by moving the task into a separate project. I had to set the project output as windows runtime component(under properties applicaiton tab) . Also don't forget to add the project as a reference.

这篇关于不能注册时间触发后台任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆