我想在进度条
中显示从数据库获取数据的进度。目前我正在更新 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-Query 的百分比,因为它不会通知您数据库查询的进度(我不知道有任何数据库系统可以让客户端了解查询的进度)查询的状态)
您可以考虑将查询分成这样的部分:
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 中使用进度条的教程,因此我不会深入讨论该主题。
关于c# - 在 WPF 中使用 EntityFrameWork 加载数据时显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51954554/