更新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,因为按下按钮时它仍然被冻结。