Загрузка табличного адаптера в wpf асинхронно
Я пытаюсь загрузить настольный адаптер asynchronously
, Я использовал await
метод.
Xaml:
<ComboBox x:Name="IDComboBox" Grid.Column="1" DisplayMemberPath="ID" HorizontalAlignment="Left" Height="Auto" ItemsSource="{Binding}" Margin="3" Grid.Row="0" VerticalAlignment="Center" Width="120" Background="White" IsEditable="True" >
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
Код:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
loadData();
}
private async void loadData()
{
// Load data into the table TBLPOOL. You can modify this code as needed.
commercialDataSet = ((Cobra.CommercialDataSet)(this.FindResource("commercialDataSet")));
var loadTblPool = Task<int>.Factory.StartNew(() => commercialDataSetTBLPOOLTableAdapter.Fill(commercialDataSet.TBLPOOL));
await loadTblPool;
tBLPOOLViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("tBLPOOLViewSource")));
tBLPOOLViewSource.View.MoveCurrentToFirst();
}
вышеприведенное действительно загружает данные асинхронно, но проблема в том, что у меня есть поле идентификатора в поле со списком. и когда я нажимаю поле со списком, чтобы выбрать и идентифицировать, программа блокируется. Когда я отлаживаю приложение, я получаю "ContextSwitchDeadLock произошло". Я посмотрел на эту ошибку, и, видимо, это происходит, когда процесс занимает слишком много времени. не уверен, почему это происходит. Если я не загружаю данные асинхронно, комбинированный список работает просто отлично.
1 ответ
Я загрузил его, обновив источник просмотра.
((System.Windows.Data.CollectionViewSource)(this.FindResource("ViewSource"))).View.Refresh();