c# - 在 WPF 中使用 EntityFrameWork 加载数据时显示进度条

标签 c# sql-server wpf multithreading entity-framework

我想在进度条中显示从数据库获取数据的进度。目前我正在更新 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/

相关文章:

wpf - 仅在 XAML 中使用的程序集不会复制到 bin 文件夹

c# - Visual Studio 中缺少异常列表

c# - 如何为 HttpClient 调用配置网络跟踪 Dotnet 核心?

sql-server - SQL Server sp_send_dbmail - 如何将邮件发送到 Gmail?

c# - 将应用程序 Web 部署到单独的 Web 服务器后出现 SQL Server 错误

c# - IsHitTestVisible=false 禁用 DataGrid 的滚动条

c# - 如何从 p12 文件中读取 SecretKey?

c# - 在特定日期触发电子邮件

sql-server - 如何将 postgresql 转储恢复到 SQL Server 实例?

c# - 每次选中一项时如何触发Selected事件