异步填充强类型数据集

时间:2013-04-13 12:01:16

标签: c# .net winforms data-binding asynchronous

我相信每个人都熟悉使用visual studio将数据填充到数据绑定控件中的传统方法。 VS创建一个强类型的DataSet,并在表单加载事件上调用DataAdapter的Fill函数,就像下面给出的代码一样:

this.applications_infoTableAdapter.Fill(this.bITSS_UIT_dBDataSet_tmpApplication.Applications_info, textBox1.Text);

除非要从数据库中提取大量数据,否则一切都很完美。

当我们在db中有超过500K的元组,并且需要在服务器端进行搜索时,即使是sql server也需要一些时间来返回数据。在这段时间内,Windows窗体的UI变得没有响应。

对于大量数据,UI在相当长的时间内仍然没有响应,这是不可接受的。

所以,我的问题是,是否有任何异步方式填充数据,以便UI保持响应,我们可能会向用户显示加载动画或我们想要的任何其他内容。

我希望自己清楚明白。

1 个答案:

答案 0 :(得分:2)

类型化数据集中没有异步填充。查询在数据库上运行,而不是在代码中运行。数据库引擎可以使用多个核进行查询,但只有在查询完成后才会返回填充调用,并且结果将通过线路同步发回。您可以通过BeginLoadData关闭数据表中的簿记,但这不会改变数据库服务器处理查询的方式。

如果您的服务器是SQL Server,您可以将SqlClient异步与启用了async = true的SqlConnection一起使用,但是类型化数据集不会生成使用SQL Server提供程序的代码,您需要以某种方式修补设计器生成的代码使用sql server对象而不是通用对象。

更简单的方法是通过System.Threading,Background Worker或PPL移动表适配器的创建并填充到后台线程,因此它会挂起另一个线程。如果要暂停或恢复数据填充,则需要重写查询以支持分页。