使用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>
仅在加载数据后,指示器才变为可见。 我缺少什么以及如何在加载数据时显示指标?
答案 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()
。