为什么我的WinRT应用程序在尝试调试后台任务时关闭了?

时间:2015-06-11 22:59:45

标签: windows-runtime

我正在尝试定期下载带有Windows应用商店后台任务的文件,但我遇到了麻烦。

我在https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx跟踪了示例,甚至下载/运行了它,一切都运行良好(包括能够进入计时器后台任务)。

因此,我在一个全新的Windows命名空间中创建了自己的后台任务

Win8BackgroundTest
{
    public class TestBackgroundTask
    {
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            var deferral = taskInstance.GetDeferral();

            var uri = new Uri("http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_h264.mov");
            var folder = ApplicationData.Current.LocalFolder;
            var downloadFile = await folder.CreateFileAsync(uri.Segments.Last(), CreationCollisionOption.GenerateUniqueName);
            var dataFile = await folder.CreateFileAsync("downloadData", CreationCollisionOption.GenerateUniqueName);
            var downloader = new BackgroundDownloader();
            var operation = downloader.CreateDownload(uri, downloadFile);

            await FileIO.WriteTextAsync(dataFile, "Success at " + DateTime.Now);

            deferral.Complete();
        }

        public static async void RegisterTask()
        {
            const string taskName = "TestBackgroundTask";

            try
            {
                var status = await BackgroundExecutionManager.RequestAccessAsync();
                if (status == BackgroundAccessStatus.Denied)
                {
                    return;
                }
            }
            catch
            {
                // already accepted
            }

            var tasks = BackgroundTaskRegistration.AllTasks
                .Where(x => x.Value.Name == taskName)
                .ToArray();

            if (tasks.Any())
            {
                return;
            }

            var builder = new BackgroundTaskBuilder
            {
                Name = taskName,
                TaskEntryPoint = "Win8BackgroundTest.TestBackgroundTask",
            };

            builder.SetTrigger(new TimeTrigger(60, false));

            var registeredTask = builder.Register();
        }
    }
}

我使用后台任务声明设置应用程序的清单,选中Timer属性复选框,并将EntryPoint设置为Win8BackgroundTest.TestBackgroundTask

然后我在App.xaml.cs OnLaunched()方法的末尾添加了以下内容:

        TestBackgroundTask.RegisterTask();

单步执行似乎已成功完成任务注册,没有例外。然后我回到visual studio,在我的任务Run()方法的第一行添加了断点,然后转到调试位置工具栏,单击向下箭头并选择TestBackgroundTask。几秒钟后,visual studio退出(和我的应用程序一样)。

有没有人看到我做错了导致后台任务失败的原因?

1 个答案:

答案 0 :(得分:0)

因此,在经历了很多挫折和大量的反复试验之后,问题就是两个评论的结合。

首先,看起来您不能在与其他Windows应用商店应用相同的项目中拥有后台任务。它必须位于自己的Windows运行时组件项目中。

最后,有时它无法正常工作,无论出于何种原因删除bin和obj文件夹修复它。