从数据库检索Data Reader时释放UI,并指示数据检索是否完成C#

时间:2018-11-20 15:44:53

标签: c# async-await ado.net db2 ibm-midrange

更新1:

  public  static DataTable GetDataTable()
        {
            using (var conn = new iDB2Connection(ConnectionString))
            {
                if (conn.State == ConnectionState.Open) conn.Close();
                conn.Open();

                iDB2Command cm = conn.CreateCommand();
                cm.CommandTimeout = 0; 
                cm.CommandType = CommandType.Text;
                cm.CommandText = "SELECT * FROM ORDER";

                var reader = cm.ExecuteReader();
                DataTable table = new DataTable();
                table.Load(reader);

                return table;
            }
        }

用于按钮

  var t = Task.Run(() => dataTable = GetDataTable());
            t.Wait();

这不会释放UI

//结束更新1

我一直在尝试,但是我不太理解异步的概念-如果问题太简单,请原谅我。

我想有一个静态方法返回一个数据读取器-这可能需要读取器分钟,因为数据有10万行。

我从论坛上阅读了其他问题,但我没办法。

public async static Task<IDataReader> GetDataReader()
{
    using (var conn = new iDB2Connection(ConnectionString))
    {
        if (conn.State == ConnectionState.Open) conn.Close();
        await conn.OpenAsync();

        iDB2Command cm = conn.CreateCommand();
        cm.CommandTimeout = 0; //Avoid Data Limitation
        cm.CommandType = CommandType.Text;
        cm.CommandText = "SELECT * FROM ORDER";

        IDataReader reader = await cm.ExecuteReaderAsync();


        return reader;

    }
}

通过按钮调用此方法

private async void btDoSomething_Click(object sender, EventArgs e)
{
        dataReader = await GetDataReader();
        //Let me know the dataReader is ready to use
}

没有错误,但是我不知道如何释放我的GUI,因为按下按钮时它仍然被冻结。

0 个答案:

没有答案