ฉันพยายามคิดว่าเหตุใดงานเบื้องหลังจึงไม่เริ่มทำงาน แต่ฉันไม่รู้ว่าฉันทำอะไรผิด
ฉันกำลังพยายามทำอะไร: ฉันต้องการงานพื้นหลังอัตโนมัติซึ่งจะดาวน์โหลด 5 รายการล่าสุดผ่าน WebApi (ข้อมูลมีขนาด 2-3 kB) หลังจากดาวน์โหลดแล้วจะตรวจสอบไฟล์ในเครื่องเพื่อดูว่ามีรายการใหม่หรือไม่ หากเป็นเช่นนั้น ฉันต้องการสร้างตราสัญลักษณ์บน LiveTile พร้อมจำนวนไอเท็มใหม่
ฉันมีรหัสต่อไปนี้:
private BackgroundTaskRegistration ScheduleBackgroundTask()
{
foreach (var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name == "TimeTriggeredTask")
{
return (BackgroundTaskRegistration)(cur.Value);
}
}
var builder = new BackgroundTaskBuilder();
builder.Name = "TimeTriggeredTask";
builder.TaskEntryPoint = "Tasks.UpdateItemTask";
builder.SetTrigger(new MaintenanceTrigger(15, false));
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.AddCondition(new SystemCondition(SystemConditionType.UserNotPresent));
BackgroundTaskRegistration task = builder.Register();
return task;
}
และงานของฉันมีลักษณะเช่นนี้:
namespace Tasks
{
public sealed class UpdateItemTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("Starting");
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
DataHandler dataHandler = new DataHandler();
BindableCollection<GeekAndPokeItemViewModel> latestItemsOnline = await dataHandler.GetData("10");
BindableCollection<GeekAndPokeItemViewModel> latestItemsLocal = await dataHandler.GetLocalData();
int difference = latestItemsOnline.Except(latestItemsLocal).Count();
if (difference > 0)
{
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear();
BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent((uint)difference);
// send the notification to the app's application tile
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeContent.CreateNotification());
}
_deferral.Complete();
}
}
}
ใน appmanifest ของฉัน backgroundTask จะถูกขยายด้วย Task "timer" และมีจุดเข้าใช้งานที่ถูกต้อง
รหัสทั้งหมดอยู่ใน 1 โครงการ
แม้ว่าจะแนบดีบักเกอร์มาด้วย (ดีบักโปรแกรมโดยไม่ต้องเริ่มแอป และบังคับให้เริ่มงาน) มันก็จะไม่กระทบกับงานของฉัน (หรือเบรกพอยต์) และใน eventviewer มันจะให้ผลลัพธ์เป็น:
งานพื้นหลังที่มีจุดเริ่มต้น Tasks.UpdateItemTask และชื่อ TimeTriggeredTask ล้มเหลวในการเปิดใช้งานด้วยรหัสข้อผิดพลาด 0x80010008
ฉันได้ตรวจสอบ ตัวอย่างงาน MS พื้นหลัง แต่ถึงอย่างนั้นก็ไม่ได้ช่วยอะไร ฉันอยากจะแนะนำว่านี่ไม่ใช่เรื่องยาก แต่ฉันไม่สามารถทำงานได้