zoukankan      html  css  js  c++  java
  • 使用BeginExecuteReader异步加载数据

    1.使用SqlCommand.ExecuteReader()方法会造成窗体假死,所以用.net2.0新增的方法BeginExecuteReader

    代码如下:

            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);
                    }
                }
            }
  • 相关阅读:
    MySQL的操作
    Centos7下MySQL的安装
    一键安装Tomcat
    Hola!
    eval
    初级版笔记(修改中)
    decode前先encode(python)
    不能scanf字符串
    第一次做题的一些问题c++
    DSY3163*Eden的新背包问题
  • 原文地址:https://www.cnblogs.com/refactor/p/2521458.html
Copyright © 2011-2022 走看看