【发布时间】:2021-06-10 09:58:03
【问题描述】:
我的 WPF 中有一个私有 async void Button_Click 方法,它运行一个非常复杂的 SQL 查询,可以运行几分钟。
我希望用户可以通过单击另一个按钮来停止此方法。
我的代码是这样的:
public partial class MainWindow : Window
{
private async void Button_Click(object sender, RoutedEventArgs e)
{
string SQL_Query= " a very long and complicated SQL query ... "
SqlCommand SQL_Query_cmd = new SqlCommand(SQL_Query, conn);
DataTable dt = new DataTable();
await Task.Run(() => {
using (SqlDataAdapter a = new SqlDataAdapter(SQL_Query_cmd))
{ a.Fill(dt);}
});
}
}
我在这个链接How to use WPF Background Worker 中读到了BackgroundWorker。
但不明白如何将它集成到我的代码中。我认为,我的“填充数据表”代码已经是异步的,但我不知道如何停止它。假设要结束这个方法的按钮叫stop_btn,它的Click方法叫cancelButton_Click。
请在帖子中写下您的答案,而不是 cmets。我将不胜感激。
【问题讨论】:
-
您可以为此使用ExecuteReaderAsync_ 和
CancellationTokenSource。 -
@KlausGütter 谢谢克劳斯。能否请您在帖子中写下您的答案。我不知道如何实施你所说的。另外我没有阅读器,我在数据表中显示结果。我修改了帖子。
-
这能回答你的问题吗? Fill DataTable asynchronously?
-
SqlCommand有一个Cancel()方法。见docs.microsoft.com/en-us/dotnet/api/… -
这能回答你的问题吗? Canceling DataAdapter.Fill()
标签: c# wpf multithreading backgroundworker