Обновление 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
}
Нетошибка, но я не знаю, как освободить мой графический интерфейс, поскольку он все еще зависает при нажатии кнопки.