使用BeginExecuteReader异步加载数据
2014-03-05 21:27
435 查看
1.使用SqlCommand.ExecuteReader()方法会造成窗体假死,所以用.net2.0新增的方法BeginExecuteReader
http://www.cnblogs.com/refactor/archive/2012/05/28/2521458.html
代码如下:
http://www.cnblogs.com/refactor/archive/2012/05/28/2521458.html
代码如下:
private delegate void DataGridViewHandler(DataTable dt); /// <summary> /// 此处开始加在数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Test;User Id=sa;Password=*********;Async=true"); conn.Open(); SqlCommand cmd = new SqlCommand("Select top 700000 * from Test", conn) {CommandTimeout = 0}; //此处开始查询数据,执行非常耗时的工作,ProcessData为执行完成后的委托 cmd.BeginExecuteReader(ProcessData, cmd); //此处不会阻塞当前线程,label2 Text会马上执行 label2.Text = "label2 Text会马上执行"; } /// <summary> /// 查询完成后,执行的方法 /// </summary> /// <param name="ar"></param> private void ProcessData(IAsyncResult ar) { SqlCommand cmd = (SqlCommand) ar.AsyncState; using (cmd.Connection) { using (cmd) { SqlDataReader sdr = cmd.EndExecuteReader(ar); DataTable dt = new DataTable("Product"); dt.Load(sdr); //将查询的数据,赋给dataGridView1的DataSource dataGridView1.BeginInvoke( new DataGridViewHandler((dtResult) => dataGridView1.DataSource = dtResult), dt); } } }
相关文章推荐
- 使用BeginExecuteReader异步加载数据
- refactor 使用BeginExecuteReader异步加载数据
- Ajax使用XML异步加载数据
- [置顶] Android_Loader_使用LoaderManager管理Loader实现异步动态加载数据
- asp.net 使用js分页实现异步加载数据
- Win8 在给列表绑定数据时,如果有需要 异步加载的数据时,一定要使用ObservableCollection
- 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案
- Python使用Selenium爬取淘宝异步加载的数据
- Echarts使用心得总结——异步数据加载与更新(二)
- ajax异步加载TreeGrid数据,使用empty()清空原始数据
- asp.net 使用js分页,异步加载数据
- 使用DataTable插件实现异步加载数据
- Android_Loader_使用LoaderManager管理Loader实现异步动态加载数据
- echarts异步数据加载使用总结
- jsTree基本使用(新增,修改,删除,移动,点击,加载默认选中根节点,异步加载数据)
- 使用原生ajax异步加载数据
- [Android Pro] 使用CursorLoader异步加载数据 from 3.0
- Android 使用Android-Universal-Image-Loader进行异步数据加载
- OkHttp异步加载数据使用单利模式
- jquery使用EasyUI Tree异步加载JSON数据(生成树)