キャンセルボタンをクリックすると、非同期/呼び出し待ちの呼び出しをキャンセルできません。グリッドにデータをロードするのに時間がかかる場合は、クエリをキャンセルしたいと思います。私は非同期/待機メソッドを使用して、多くの例を参照して新しいですが、場合は、トレーニングができません。喜んで私の下のコードを見て、助けてください。ありがとうキャンセルすることができません非同期/呼び出し待ちボタンクリック
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、いいえ、それはエラーを投げていない、ちょうど完了したクエリとデータをキャンセル要求を受け入れずにグリッドビューにロードしました。私はそれをデバッグする方法とトラブルシュートを知らない。 –