งานพื้นหลังไม่เริ่มทำงาน

ฉันพยายามคิดว่าเหตุใดงานเบื้องหลังจึงไม่เริ่มทำงาน แต่ฉันไม่รู้ว่าฉันทำอะไรผิด

ฉันกำลังพยายามทำอะไร: ฉันต้องการงานพื้นหลังอัตโนมัติซึ่งจะดาวน์โหลด 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 พื้นหลัง แต่ถึงอย่างนั้นก็ไม่ได้ช่วยอะไร ฉันอยากจะแนะนำว่านี่ไม่ใช่เรื่องยาก แต่ฉันไม่สามารถทำงานได้


person pazcal    schedule 20.02.2013    source แหล่งที่มา
comment
อาจเป็นเพียงข้อความบันทึกในงานของคุณเพื่อดูว่าไม่พบหรือไม่   -  person Dreamwalker    schedule 20.02.2013
comment
ดีบักเกอร์กำลังทำงานโดยไม่มีปัญหา เพียงแต่มันไม่ถึงจุดพักเมื่อเริ่มงาน ซึ่งหมายความว่างานไม่ได้ถูกไล่ออกด้วยซ้ำ... ฉันจะบอกว่าการเข้าสู่ระบบงานจะไม่ช่วยเพราะงาน ไม่ได้ถูกดำเนินการเลย...   -  person pazcal    schedule 20.02.2013
comment
ฉันเพิ่งอ่านเอกสารเกี่ยวกับหมวดหมู่ของ ทริกเกอร์การบำรุงรักษา ทริกเกอร์นี้จริงๆ แล้วคือ SystemTrigger แทนที่จะเป็น TimeTrigger (กำหนดไว้ใน appmanifest ของฉัน) ฉันเปลี่ยนแปลงสิ่งนี้แล้ว แต่ยังไม่มีผลลัพธ์ ฉันยังคงมีข้อความแสดงข้อผิดพลาดเหมือนเดิม...   -  person pazcal    schedule 20.02.2013
comment
ในที่สุดฉันก็ทำมันสำเร็จ!! อันดับแรก: ฉันได้ย้ายงานไปยังแอสเซมบลีใหม่เป็นประเภทส่วนประกอบ Windows RT และเพิ่มการอ้างอิงในแอป WinRT ของฉัน ประการที่สอง: ฉันมี BackgroundTaskRegistration และ UpdateItemTask ในไฟล์ 1 cs โดยมีเพียงงานที่ถูกปิดผนึกเท่านั้น ฉันต้องตั้งค่า BackgroundTaskRegistration ให้เป็นแบบปิดผนึกด้วยเพื่อที่จะคอมไพล์ เมื่อฉันบังคับเหนี่ยวไก มันก็ถึงจุดพักในที่สุด...   -  person pazcal    schedule 20.02.2013
comment
เพิ่งเห็นโพสต์ของคุณ แต่มีข่าวดี :)   -  person Dreamwalker    schedule 20.02.2013


คำตอบ (1)


ในที่สุดฉันก็ทำมันสำเร็จ!!

อันดับแรก: ฉันได้ย้ายงานไปยังแอสเซมบลีใหม่เป็นประเภทส่วนประกอบ Windows RT และเพิ่มการอ้างอิงในแอป WinRT ของฉัน

ประการที่สอง: ฉันมี BackgroundTaskRegistration และ UpdateItemTask ในไฟล์ 1 cs โดยมีเพียงงานที่ถูกปิดผนึกเท่านั้น ฉันต้องตั้งค่า BackgroundTaskRegistration ให้เป็นแบบปิดผนึกด้วยเพื่อที่จะคอมไพล์ เมื่อฉันบังคับเหนี่ยวไก มันก็ถึงจุดพักในที่สุด...

person pazcal    schedule 05.03.2013