【发布时间】:2013-05-16 14:28:39
【问题描述】:
不做太多细节,这里是基本场景。
我有一个从服务器下载文件的 Metro 应用程序。
下载文件后,ListView 会在 UI 中使用其基本属性进行更新。如果用户从ListView 中选择一个ListViewItem,它的StorageFile 内容会显示在它旁边。然后,用户根据所选的StorageFile 内容采取一些行动。
现在是设计问题:
在Suspending 或Shutdown - 我希望应用程序继续从服务器下载文件,所以我注册了2 BackgroundTasks。一个是SystemTrigger,它立即启动,另一个是TimeTrigger,每15分钟启动一次。 BackgroundTasks 还会发出通知,以便用户知道还有更多文件可用。
当Suspending 事件引发时(以及在Shutdown 上),我Register 这些任务。当引发Resuming 事件或从头开始构建应用程序时,我Unregister 这些任务。这可确保 UI 或 BackgroundTask 负责处理,而不是两者都负责。
在 Visual Studio 中对此进行测试时,BackgroundTasks 按预期工作。但是,在 Visual Studio 之外,BackgroundTasks 似乎永远不会触发。这些BackgroundTasks 请求锁定屏幕访问,通过BackgroundExecutionManager.RequestAccessAsync().
此设计是否存在根本缺陷,还是我遗漏了一些非常简单的东西?任何帮助将不胜感激。
【问题讨论】:
-
在您的测试中,您是否在 Surface RT 上进行测试?您的开发环境和消费环境之间存在很大差异的一件事是处理能力,以及诸如数据使用限制之类的事情。你可能会遇到其中任何一个。
-
我目前正在我的电脑上进行测试。
-
您是否在不在开发环境中时手动将应用程序发布到您的锁定屏幕?来自 API:“用户必须先将您的应用置于锁定屏幕,然后应用才能使用这些后台任务。应用可以通过调用 RequestAccessAsync 请求锁定屏幕访问。这会显示一个对话框,要求用户“允许”或“不要”在锁定屏幕上“不允许”您的应用。一个应用只允许请求一次锁定屏幕访问;随后对 RequestAccessAsync 的任何调用都将被忽略。”
-
我很抱歉继续“通过议案”,只是试图确保所有的基础都被覆盖。您是否确保后台任务声明中的入口点指向后台任务的正确命名空间和类?我知道即使应用清单存在问题(例如徽标图像大小不正确),我的开发环境中也有很多东西可以工作。
标签: c#-4.0 windows-runtime microsoft-metro background-process winrt-async