zoukankan      html  css  js  c++  java
  • refactor 使用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);
                    }
                }
            }

  • 相关阅读:
    JavaScript备忘录-逻辑运算符
    CMake 构建项目教程-简介
    C++ 跨语言调用 Java
    Thrift-0.10.0 CenOS 7 编译错误 error: expected ')' before 'PRIu32'
    CentOS 7 安装 MySQL Database
    CentOS 安装 Wine
    FreeBSD 配置
    CentOS 6.5 升级 GCC 4.9.3
    Favorite Setting
    shell编程-1到100的求和与冒泡排序
  • 原文地址:https://www.cnblogs.com/yeye518/p/2775082.html
Copyright © 2011-2022 走看看