从后台任务更新Metro App UI ObservableCollection
本文关键字:UI ObservableCollection App Metro 后台任务 更新 | 更新日期: 2023-09-27 18:07:51
是否可以在BackgroundTask
和Metro App UI之间进行双向通信?
期望的功能如下:
- 如果Metro App被关闭/挂起,
BackgroundTask
继续做什么是必需的。 - 如果Metro App打开/恢复,
BackgroundTask
继续做什么,但也会通知Metro应用,新数据是可用。 - Metro App然后用新数据更新其UI。Metro App UI允许用户执行某些操作。
- 这些动作是内存中的
Queued
。BackgroundTask
监视器此内存Queue
并处理这些操作。
请告知这是否可能,或者建议一个设计来满足这些要求。
使用thread
或Task
作为背景
Task.Factory.StartNew(() =>
{
// Download data
}).ContinueWith(t =>
{
// Update UI
}, Scheduler.FromCurrentSynchronizationContext());
同步上下文中的ContinueWith
很重要,因为从另一个线程更新ObservableCollection
会得到一个异常,你也可以使用Dispatcher
在UI线程上执行代码块。
以上文字保留原始答案:
后台任务的MSDN指南在这里链接清楚地说明:
- 后台任务根本不应该更新UI,除了系统UI,如通知等
- 后台任务应该通过持久存储与应用程序通信
你的问题需要通过为你的应用程序维护一个"新数据"存储来解决,后台工作者将下载数据并写入这里,当你的应用程序恢复/打开时将检查并删除该数据,允许你更新你的UI -存储充当你的中间队列。
在这里找到了对BackgroundTasks的详细理解:
BackgroundTasks简介
隐含地回答了我的问题