Бесплатный интерфейс при извлечении Data Reader из базы данных и указание, завершено ли извлечение данных C # - PullRequest
0 голосов
/ 20 ноября 2018

Обновление 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();

Это не освобождает пользовательский интерфейс

// Окончание обновления 1

У меня естьпытался, но я не мог понять концепцию асинхронности хорошо - пожалуйста, прости меня, если вопрос слишком прост.

Я хочу, чтобы статический метод возвращал читателя данных - это может занять считыватель минут, поскольку данные имеют как 100Kстрок.

Я читал другие вопросы с форума, но не мог подать руку.

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
}

Нетошибка, но я не знаю, как освободить мой графический интерфейс, поскольку он все еще зависает при нажатии кнопки.

...