我必须说,我一直在阅读这个网站很长一段时间,总是发现我在找什么。可悲的是,今天并非如此。设置DataGridView.DataSource异步
我有一个.NET C#Winforms应用程序,它使用MySQL .NET Connector来查询数据库并用结果填充DataGridView。
这里是我的代码:
using (var SqlConn = new MySqlConnection(MyConnectionString)
{
using (var SqlComm = new MySqlCommand("SELECT * FROM my_database.city", SqlConn)
{
using (var SqlAdapter = new MySqlDataAdapter(SqlComm)
{
DataTable SqlOutput = new DataTable();
SqlAdapter.Fill(SqlOutput);
myDataGridView.DataSource = SqlOutput;
}
}
}
的代码是工作的罚款。问题是,考虑到该表有20K行,需要一些时间来加载,并在此期间,它阻止用户界面。
做了一些测试,我得出结论,数据库查询Fill()其速度非常快(它实际上需要10ms)。 因此,设置DataGridView.DataSource属性会延迟整个操作。
所以我的问题是,有没有办法设置DataSource propery异步?或者,也许我仍然可以在数据加载时使用表单的方式?
我还想知道是否有更好的方法来做到这一点,因为每次我在数据库表上进行更改时都会调用此方法,因此我可以显示用户更新的信息。
在此先感谢。
20K在'DataGriView'中显示的行太多。使用分页加载数据会更好。还要防止加载数据时使用UI冻结异步/等待或加载数据在不同于UI线程的线程中。 [示例:在Windows窗体中将数据异步加载到我的DataTable中](http://stackoverflow.com/a/38427392/3110834) –
@RezaAghaei我有一个实现MySqlDataAdapter.FillAsync方法的async/await方法。但是从数据库中提取数据实际上并没有冻结UI,因此设置了DataSource属性。而且我仍然会同步做这一步。你能告诉我更多关于加载与分页? –
因此,在[虚拟模式](https://msdn.microsoft.com/en-us/library/15a31akc(v = vs.110).aspx)中使用'DataGridView'或加载分页数据。 –