gpt4 book ai didi

c# - 无法注册时间触发的后台任务

转载 作者:太空狗 更新时间:2023-10-29 18:18:47 25 4
gpt4 key购买 nike

对于 Windows 8 应用程序,我尝试在 C#/Xaml 中注册后台任务。很难说,但我想我的后台任务已经很好地注册了,但是当我在调试位置工具栏上单击我的后台任务的名称时,我的应用程序停止工作,没有任何消息。

我查看了事件查看器上的日志,我得到:“具有入口点 MyApp.Pages.SampleBackgroundTask 和名称示例每小时后台任务的后台任务无法激活,错误代码为 0x80010008。”

这是我的代码:

   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");
}

我在 list 中添加了这个:

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

我是不是忘记了什么?

感谢您的帮助。

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

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

_deferral.Complete();
}
}

最佳答案

我也遇到过这个问题。我在同一个项目中也有我的。我终于通过将任务移到一个单独的项目中来让它工作。我必须将项目输出设置为 Windows 运行时组件(在属性应用程序选项卡下)。另外不要忘记添加项目作为引用。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com