2015-10-14 60 views
0

我试图加载一个表格适配器asynchronously。我使用了await方法。在wpf中异步加载tableadapter

的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(); 

} 

上述不加载数据异步,但问题是我在组合框一个ID字段。当我按下组合框来选择ID时程序锁定。当我调试应用程序时,出现“发生ContextSwitchDeadLock”。我看着这个错误,显然它发生在一个过程花费太长时间。不知道为什么会发生这种情况。如果我不加载数据异步,组合框工作得很好。

+0

我对你的代码做了一个镜头,从数据库中加载了带有31,000+个ID的组合,加载或选择时没有问题。除了我没有执行'FindResource()'位...我可以问这是什么吗? – jsanalytics

+0

它只是所以我可以移动到第一个记录,当它完成加载。否则一切都是空白的。感谢您的尝试,您是否使用了相同的异步方法? – Gisiota

+0

要移动到第一条记录,只需在组合的XAML中执行'SelectedIndex ='0'''。如果你摆脱了FindResource()位,问题就消失了吗?是的,我使用'async/await'来加载数据。 – jsanalytics

回答

0

我通过刷新视图来加载它。

((System.Windows.Data.CollectionViewSource)(this.FindResource("ViewSource"))).View.Refresh();