Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows runtime 为什么我的WinRT应用程序在调试后台任务时关闭?_Windows Runtime - Fatal编程技术网

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

Windows runtime 为什么我的WinRT应用程序在调试后台任务时关闭?,windows-runtime,Windows Runtime,我正在尝试用windows应用商店应用程序的后台任务定期下载文件,但遇到了问题 我在上跟踪了这个示例,甚至下载/运行了它,一切都很顺利(包括能够进入计时器后台任务) 因此,我在一个全新的Windows名称空间中创建了自己的后台任务 Win8BackgroundTest { public class TestBackgroundTask { public async void Run(IBackgroundTaskInstance taskInstance)

我正在尝试用windows应用商店应用程序的后台任务定期下载文件,但遇到了问题

我在上跟踪了这个示例,甚至下载/运行了它,一切都很顺利(包括能够进入计时器后台任务)

因此,我在一个全新的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();
        }
    }
}
我使用后台任务声明设置应用程序的清单,选中计时器属性复选框,并将入口点设置为
Win8BackgroundTest.TestBackgroundTask

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

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


有人看到我做错了什么导致后台任务失败了吗?

所以在经历了很多挫折和反复尝试之后,问题是这两种评论的结合

因此,首先,看起来您不能将后台任务与windows应用商店应用程序的其余部分放在同一个项目中。它必须位于自己的windows运行时组件项目中


最后,有时它根本不起作用,不管出于什么原因,删除bin和obj文件夹都会修复它。

查看上面的代码时,没有任何东西会跳出。我记得在做背景任务时遇到了一些麻烦。其中之一是我必须将我的任务放入它自己的“windows运行时组件”类型的项目中。当您创建一个新项目时,您将看到这是一种可用的项目类型。我自己也经常遇到这个问题。为了让它工作,我重建了后台项目,关闭解决方案,从调试文件夹中删除bin&obj文件夹,再次打开项目,将后台dll重新连接到前台应用程序,然后重建整个解决方案,并在调试模式下运行它。