我正在尝试加载表适配器asynchronously
。我用的await
方法。
xml:
<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();
}
上面确实会异步加载数据,但问题是我在组合框中有一个 ID 字段。当我按下组合框来选择和识别程序时,程序就会锁定。当我调试应用程序时,我得到一个“发生 ContextSwitchDeadLock”。我查看了那个错误,显然它发生在一个过程花费太长时间时。不知道为什么会这样。如果我不异步加载数据,组合框就可以正常工作。