C# 从Windows 8应用商店应用程序中的异步方法报告进度
在Windows8风格的应用程序中,我有以下代码,用于检索自定义文件服务中的文件列表。这是在ViewModel的构造函数中激发的C# 从Windows 8应用商店应用程序中的异步方法报告进度,c#,windows-8,progress-bar,winrt-xaml,async-await,C#,Windows 8,Progress Bar,Winrt Xaml,Async Await,在Windows8风格的应用程序中,我有以下代码,用于检索自定义文件服务中的文件列表。这是在ViewModel的构造函数中激发的 private async void Construct() { Files = new ObservableCollection<FileViewModel>(); IList _files = await _fileRepository.GetFiles(); foreach (File file in _files) {
private async void Construct()
{
Files = new ObservableCollection<FileViewModel>();
IList _files = await _fileRepository.GetFiles();
foreach (File file in _files)
{
Files.Add(new FileViewModel(file));
}
}
private异步void构造()
{
Files=新的observeCollection();
IList_files=await_fileRepository.GetFiles();
foreach(文件在_文件中)
{
添加(新文件视图模型(文件));
}
}
它工作得很好,但我正在努力弄清楚的是,我将如何对此执行进度报告,以通知用户在加载文件时发生了什么
看看它,我想有一个boolisbusy属性,我可以绑定到视图上的ProgressRing之类的东西。当进程启动时,我可以将其设置为true,但如何从操作中获得完整的回调,然后将此属性设置为False
非常感谢 首先,我认为不应该使用
async void
方法(当然,除非它们是事件处理程序)。“异步构造函数”最好作为静态async
factory方法实现,或者使用(在我的博客上解释)。这两种方法都优于异步void
现在,请看进度报告。该文档描述了报告进度的推荐方法,我的库中包含一个名为PropertyProgress
的IProgress
实现,专门用于将进度更新视为ViewModel可观察属性
然而,听起来你只需要一个“忙碌的指示器”,而不是一个完整的“进度报告”。这相当简单:
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));
}
}
专用异步任务构造()
{
Files=新的observeCollection();
IsBusy=true;
IList_files=await_fileRepository.GetFiles();
IsBusy=false;
foreach(文件在_文件中)
{
添加(新文件视图模型(文件));
}
}
在本例中,我假设
IsBusy
setter将适当地引发INotifyPropertyChanged.PropertyChanged
。首先,我认为不应该使用异步void
方法(当然,除非它们是事件处理程序)。“异步构造函数”最好作为静态async
factory方法实现,或者使用(在我的博客上解释)。这两种方法都优于异步void
现在,请看进度报告。该文档描述了报告进度的推荐方法,我的库中包含一个名为PropertyProgress
的IProgress
实现,专门用于将进度更新视为ViewModel可观察属性
然而,听起来你只需要一个“忙碌的指示器”,而不是一个完整的“进度报告”。这相当简单:
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));
}
}
专用异步任务构造()
{
Files=新的observeCollection();
IsBusy=true;
IList_files=await_fileRepository.GetFiles();
IsBusy=false;
foreach(文件在_文件中)
{
添加(新文件视图模型(文件));
}
}
在本例中,我假设IsBusy
setter将适当地引发INotifyPropertyChanged.PropertyChanged