我無法取消異步/等待呼叫取消按鈕單擊。如果要在網格中加載數據需要很長時間,我想取消查詢。我是新來的使用異步/等待方法,並提到了很多例子,但無法鍛鍊如果。請認真看看我的下面的代碼和請幫助。謝謝無法取消異步/等待呼叫按鈕單擊
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,不,它不會拋出任何錯誤,只是完成查詢並將數據加載到網格視圖而沒有接受取消請求。我不知道如何調試它並排除故障。 –