实体框架加载数据时的WPF加载指示符

时间:2013-10-29 14:35:21

标签: wpf entity-framework busyindicator

使用Entity Framework从数据库加载数据需要很长时间我想在UI(WPF)上显示“加载”指示符。对于指标本身,我正在使用文章中显示的WPF Loading Wait Adorner

该指标工作正常,但在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>  

仅在加载数据后,指示器才变为可见。 我缺少什么以及如何在加载数据时显示指标?

1 个答案:

答案 0 :(得分: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()