Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Windows 8应用商店应用程序中的异步方法报告进度_C#_Windows 8_Progress Bar_Winrt Xaml_Async Await - Fatal编程技术网

C# 从Windows 8应用商店应用程序中的异步方法报告进度

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) {

在Windows8风格的应用程序中,我有以下代码,用于检索自定义文件服务中的文件列表。这是在ViewModel的构造函数中激发的

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