从后台任务更新Metro App UI ObservableCollection

时间:2013-04-07 20:54:31

标签: c# windows-runtime microsoft-metro background-process

BackgroundTask和Metro App UI之间是否可以进行双向通信?

所需的功能如下:

  • 如果Metro App已关闭/暂停,BackgroundTask会继续执行此操作 是必需的。
  • 如果Metro App已打开/恢复,BackgroundTask将继续执行此操作 是必需的,但也通知Metro App,新数据是 可用。
  • Metro App然后使用新数据更新其UI。 Metro App UI 允许用户采取某些行动。
  • 这些操作在内存中为QueuedBackgroundTask监控 此内存Queue并处理这些操作。

请告知是否可行,或建议设计符合这些要求。

2 个答案:

答案 0 :(得分:0)

只需使用背景threadTask

即可
Task.Factory.StartNew(() =>
{
   // Download data 
}).ContinueWith(t => 
{
   // Update UI
}, Scheduler.FromCurrentSynchronizationContext());

同步上下文中的ContinueWith很重要,因为您将从另一个线程获得更新ObservableCollection的异常,您还可以使用Dispatcher执行代码块UI线程。


上面的文字仍然显示原始答案:

关于here链接的后台任务的MSDN指南明确指出:

  1. 后台任务不应该更新UI,除了通知等系统UI
  2. 后台任务应通过持久存储与应用程序通信
  3. 您的问题需要通过为您的应用程序维护“新数据”存储来解决,后台工作人员将下载数据并在此处写入,恢复/打开时您的应用程序将检查并删除该数据以允许您更新UI - 存储充当您的中间队列。

答案 1 :(得分:0)

在这里找到了对BackgroundTasks的详细了解:

Introduction to BackgroundTasks

这隐含地回答了我的问题。