c# - 在 WPF 中使用 EntityFrameWork 加载数据时显示进度条
问题描述
我想显示从数据库中获取数据的进度Progressbar
。目前我正在更新Button
. 不知道如何在这段代码中实现。
private async void FetchInvoicesDataFunc(object sender, RoutedEventArgs e)
{
ProgressBtn.Content = "Loading Data ...";
InvoiceGrid.ItemsSource = await Task.Run(FetchInvoiceDataAsync);
ProgressBtn.Content = "Loaded !";
}
private async Task<List<Invoice>> FetchInvoiceDataAsync()
{
List<Invoice> result;
using(var context = new Intelliventory_DBEntities() )
{
result = await context.Invoices.Where(b => b.InvoiceID <= 2000).Include(x => x.Customer).ToListAsync();
}
return result;
}
}
解决方案
您将无法显示 EF 查询的百分比,因为它不会通知您数据库查询的进度(我不知道有任何数据库系统可以让客户了解询问)
您可以考虑将您的查询拆分成这样的部分:
private async void FetchInvoicesDataFunc(object sender, RoutedEventArgs e)
{
List<Invoice> results = new List<Invoice>();
ProgressBtn.Content = "Loading Data ...";
await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(0, 500));
ProgressBtn.Content = "25% done...";
await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(501, 1000));
ProgressBtn.Content = "50% done...";
await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(1001, 1500));
ProgressBtn.Content = "75% done...";
await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(1501, 2000));
InvoiceGrid.ItemsSource = results;
ProgressBtn.Content = "Loaded !";
}
private async Task<List<Invoice>> FetchInvoiceDataAsync(int start, int end)
{
List<Invoice> result;
using(var context = new Intelliventory_DBEntities() )
{
result = await context.Invoices.Where(b => b.InvoiceID >= start && b.InvoiceID <= end).Include(x => x.Customer).ToListAsync();
}
return result;
}
请注意,这将对您的应用程序的性能产生负面影响。有成千上万的教程如何在 WinForms 和 WPF 中使用进度条,所以我不会深入探讨这个话题。
推荐阅读
- linux - 关于在Linux中设置环境变量的简单问题
- python - Anaconda Navigator 未在 Windows 10 中启动
- r - 如何通过R中的变量计算疾病流行率
- javascript - 如何根据首次启动设置初始屏幕?
- triggers - Apex 触发器(插入前):在创建新潜在客户记录期间使用自定义查找字段中的值更新公司名称
- c++ - 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- matlab - 如何将带表格的 71 x 12 单元阵列更改为带表格的 1 x 71 单元阵列
- ember.js - 如何使用计算属性用斜线或破折号形成日期?
- python - 在 Django 中将产品和数量添加到发票中
- linux - 如何替换文件中的特定字符,它在 bash 命令行或脚本中的位置发生变化?