我正在尝试定期下载带有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退出(和我的应用程序一样)。
有没有人看到我做错了导致后台任务失败的原因?
答案 0 :(得分:0)
因此,在经历了很多挫折和大量的反复试验之后,问题就是两个评论的结合。
首先,看起来您不能在与其他Windows应用商店应用相同的项目中拥有后台任务。它必须位于自己的Windows运行时组件项目中。
最后,有时它无法正常工作,无论出于何种原因删除bin和obj文件夹修复它。