异步数据加载,但UI变为无响应WPF

时间:2018-08-21 09:28:51

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

我有一个window,它的一个StackPanel名为ControlContainer。我正在使用此代码在此UserControl的按钮单击事件中加载StackPanel

private void ManageInvoicesFunc(object sender, RoutedEventArgs e)
{    
  ControlContainer.Children.Clear();
   if (sender == null)
    {
      throw new ArgumentNullException(nameof(sender));
    }
  UserControl newControl = new ManageInvoiceControl();
  ControlContainer.Children.Add(newControl);
}  

UserControl有一个名为DataGrid的{​​{1}},我正在使用此代码在Button Click事件上将数据加载到此InvoiceGrid中。

DataGrid

我正在使用private async void FetchInvoicesDataFunc(object sender, RoutedEventArgs e) { ProgressBtn.Content = "Loading Data ..."; InvoiceGrid.ItemsSource = await 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 <= 100).Include(x => x.Customer).ToListAsync(); } return result; } 。从数据库中获取数据的代码看起来是异步的。但是我仍然面临着这个问题。当单击按钮并调用Entity Framework时,UI会持续几秒钟或更长时间。然后,它变为正常,但是当ManageInvoicesFunc中的数据即将加载时,UI再次变得无响应。最后,在加载数据时,UI是Kinda响应式的,但是DataGrid是Kinda响应式的,这导致UI变为响应式。我只加载100条记录。
请帮助我,代码或UI设计有什么问题? 我正在加载的数据
dataGrid

1 个答案:

答案 0 :(得分:0)

只是帮助别人!问题不在于此异步代码,而在于DataGrid本身。 DataGrid位于使Virtualization被禁用的堆栈面板中。加DataGrid应该已经定义了高度,并且不能在ScrollView内,它将正常工作!