从后台任务更新Metro App UI ObservableCollection



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

期望的功能如下:

  • 如果Metro App被关闭/挂起,BackgroundTask继续做什么是必需的。
  • 如果Metro App打开/恢复,BackgroundTask继续做什么,但也会通知Metro应用,新数据是可用。
  • Metro App然后用新数据更新其UI。Metro App UI允许用户执行某些操作。
  • 这些动作是内存中的QueuedBackgroundTask监视器此内存Queue并处理这些操作。

请告知这是否可能,或者建议一个设计来满足这些要求。

使用threadTask作为背景

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

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


以上文字保留原始答案:

后台任务的MSDN指南在这里链接清楚地说明:

  1. 后台任务根本不应该更新UI,除了系统UI,如通知等
  2. 后台任务应该通过持久存储与应用程序通信

你的问题需要通过为你的应用程序维护一个"新数据"存储来解决,后台工作者将下载数据并写入这里,当你的应用程序恢复/打开时将检查并删除该数据,允许你更新你的UI -存储充当你的中间队列。

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

BackgroundTasks简介

隐含地回答了我的问题

最新更新