2012-09-26 2 views
1

Windows 8 Style 응용 프로그램에서 사용자 지정 FileService의 파일 목록을 검색하는 다음 코드가 있습니다. 이 문제는 ViewModel의 생성자에서 발생합니다.Windows 8 Store App의 Async 메서드를 통한 진행보고

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

그것은 완벽하게 작동하지만, 제가 알아 내기 위해 고군분투하는 내가 진행이 파일이로드되는 동안 어떤 일이 일어나고 사용자에게 알려이에 대한보고를 수행하는 것이 방법이다.

내가보기에 ProgressRing과 같은 뷰에 바인딩 할 수있는 bool IsBusy 속성이 필요합니다. 프로세스가 시작될 때 이것을 true로 설정할 수 있지만,이 속성을 False로 설정할 수있는 작업에서 Completed 콜백을 얻으려면 어떻게해야합니까?

감사합니다.

답변

1

먼저 이벤트 처리기가 아닌 한 async void 메쏘드를 사용하면 안된다고 생각합니다. "비동기 생성자"는 고정 된 async 팩토리 메서드 또는 asynchronous lazy initialization (내 블로그에서 설명 됨)으로 구현하는 것이 가장 좋습니다. 두 방법 모두 async void보다 좋습니다.

지금, 진행 상황보고. Task-based Asynchronous Programming 문서는 진행 상황을보고하는 데 권장되는 방법을 설명하며, AsyncEx 라이브러리는 진행률 업데이트를 ViewModel 관찰 가능 속성으로 처리하기 위해 PropertyProgress이라는 IProgress<T> 구현을 포함합니다.

그러나 "진행률 보고서"가 아닌 "통화 중 표시기"가 필요한 것처럼 들립니다. 이 예에서

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을 올릴 있으리라 믿고있어 : 이것은 꽤 간단입니다.

관련 문제