繁体   English   中英

Windows 8 Store App中异步方法的进度报告

[英]Progress Reporting from an Async method in a Windows 8 Store App

在Windows 8 Style应用程序中,我有以下代码正在检索自定义FileService中的文件列表。 这是在ViewModel的构造函数中触发的。

private async void Construct()
{
   Files = new ObservableCollection<FileViewModel>();
   IList _files = await _fileRepository.GetFiles();
   foreach (File file in _files)
   {
      Files.Add(new FileViewModel(file));
   }
}

它可以完美地工作,但是我想弄清楚的是我将如何对此执行进度报告以通知用户加载文件时发生了某些事情。

看着它,我想拥有一个bool IsBusy属性,可以将它绑定到诸如View上的ProgressRing之类的东西。 我知道可以在过程开始时将其设置为true,但是如何从操作中获取Completed回调,然后可以将该属性设置为False?

非常感谢!

首先,我认为您不应该使用async void方法(当然,除非它们是事件处理程序)。 最好将“异步构造函数”实现为静态async工厂方法或异步惰性初始化 (在我的博客中进行了解释)。 这两种方法都比async void更好。

现在,进行进度报告。 基于任务的异步编程文档描述报告进展情况的推荐方式,而我AsyncEx库包括IProgress<T>称为实施PropertyProgress专门用于治疗最新进展为视图模型观察到的性能。

但是,听起来您只需要一个“忙碌指示器”,而不是完整的“进度报告”。 这要简单得多:

private async Task Construct()
{
  Files = new ObservableCollection<FileViewModel>();
  IsBusy = true;
  IList _files = await _fileRepository.GetFiles();
  IsBusy = false;
  foreach (File file in _files)
  {
    Files.Add(new FileViewModel(file));
  }
}

在此示例中,我假设IsBusy设置程序将适当地引发INotifyPropertyChanged.PropertyChanged

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM