我无法取消异步/等待呼叫取消按钮单击。如果要在网格中加载数据需要很长时间,我想取消查询。我是新来的使用异步/等待方法,并提到了很多例子,但无法锻炼如果。请认真看看我的下面的代码和请帮助。谢谢无法取消异步/等待呼叫按钮单击
namespace MyFirstAsync
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
CancellationTokenSource cts ;
private async void btnExecute_Click(object sender, EventArgs e)
{
cts = new CancellationTokenSource();
try
{
string connectionString = "Data Source=G50-80;Initial Catalog=HPSF_Compdb;User ID=sa;[email protected]";
string sqlQuery = "select top 900000 * from requestevent.result";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
await conn.OpenAsync(cts.Token);
SqlDataReader reader = await cmd.ExecuteReaderAsync(cts.Token);
DataTable dt = new DataTable();
//cts.Cancel();
await Task.Run(() => dt.Load(reader), cts.Token);
gvData.Invoke(new gvDelegate(UpdateDataToGrid), new object[] { dt });
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public delegate void gvDelegate(DataTable dt);
public void UpdateDataToGrid(DataTable dt)
{
gvData.DataSource = dt;
}
private void btncancel_Click(object sender, EventArgs e)
{
cts.Cancel();
}
}
}
所以会发生什么,当你运行该代码?你有什么例外吗?你提供的细节越多,你的问题就越有可能得到回答。 –
嗨Ruben,不,它不会抛出任何错误,只是完成查询并将数据加载到网格视图而没有接受取消请求。我不知道如何调试它并排除故障。 –