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