2013-10-29 3 views
0

Entity Framework를 사용하여 데이터베이스에서 데이터를로드하는 데 UI (WPF)에 "로딩"표시기를 표시하고 싶습니다. 인디케이터 자체에 대해서는 기사에 표시된대로 WPF Loading Wait Adorner을 사용하고 있습니다.Entity Framework에서 데이터를로드 할 때 WPF 로딩 표시기

표시기는 제대로 작동하지만 Entity Framework에서 데이터를로드 할 때 표시되지 않습니다. 이 경우 표시기는 UI에 전혀 표시되지 않습니다.

'show Adorner (loading indicator) 
LoadingAdorner.IsAdornerVisible = Not LoadingAdorner.IsAdornerVisible 

'read data from database with Entity Framework 
Persons = _context.persons 

'hide Adorner (loading indicator) after loading data is completed 
LoadingAdorner.IsAdornerVisible = Not LoadingAdorner.IsAdornerVisible 

데이터가로드 된 후에 만 ​​

<ac:AdornedControl Name="LoadingAdorner"> 
     <ac:AdornedControl.AdornerContent> 
      <local:LoadingWait></local:LoadingWait> 
     </ac:AdornedControl.AdornerContent> 
     <ListBox> 
      ...code not shown 
     </ListBox> 
</ac:AdornedControl> 

표시기가 표시됩니다 :

나는이 실행됩니다. 누락 된 부분과 데이터가로드되는 동안 표시기를 표시하는 방법은 무엇입니까?

답변

2

문제는 메인 스레드에서 EF 호출을 실행하고 있다는 것입니다. 이렇게하면 DB에서 모든 데이터를받을 때까지 UI가 업데이트되지 않습니다. (- UI 스레드 백그라운드 스레드에서 수행 DoWork, 이 완료)

마음에 크로스 스레드 액세스를 유지 :

var worker = new BackgroundWorker(); 
    worker.DoWork += (s, e) => { 
     this.IsLoading = true; 
     this.Persons = _context.persons; 
    };   
    worker.RunWorkerCompleted += (s, e) => { 
     this.IsLoading = false; 
    }; 

중요 :
BackgroundWorker 또는 비동기 메소드를 추가이 문제를 해결하려면 그리고 마지막에/DoWork을 시작/실행하려면 작업자에게 .RunWorkerAsync()을 실행해야합니다.

+0

어떻게 사용할 수 있습니까? 지금 어떻게 "doWork"라고 할 수 있습니까? –

+0

@PieroAlberto'.RunWorkerAsync();'작업을 시작합니다. –