2013-10-29 78 views
0

使用實體框架從數據庫加載數據需要很長時間我想在UI(WPF)上顯示「加載」指示器。對於指標本身,我使用文章中所示的WPF Loading Wait Adorner實體框架加載數據時WPF加載指示器

該指標工作正常,但在Entity Framework加載數據時未顯示。在這種情況下,指標在用戶界面上根本不會顯示。

我運行此:

'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調用。這會阻止UI被更新,直到您從數據庫接收到所有數據。
爲了解決這個問題只需要添加BackgroundWorker或異步方法:

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

重要:請記住跨線程訪問(在後臺線程執行DoWork的完成 - UI線程)

最後開始/觸發DoWork您需要在您的員工上執行.RunWorkerAsync()

+0

我該如何使用它?我現在怎麼對它說「doWork」? –

+0

@PieroAlberto'.RunWorkerAsync();'將開始工作。 –