gpt4 book ai didi

c# - 取消 DataAdapter.Fill()

转载 作者:太空狗 更新时间:2023-10-29 23:47:56 25 4
gpt4 key购买 nike

场景:我们有一个附加到 DataAdapter(数据表)的 DataGridView,我们在单独的线程(使用委托(delegate)和 beginInvoke)中使用 (adapter.fill(query, datatable)) 将数据加载到数据表中,一旦加载数据,我们就附加该数据表到 datagridview(在主线程中)

有没有一种方法可以检查 fill() 是否仍在执行并取消它。

真实场景:用户点击用户名,相应的数据被加载到数据网格中。有的时候用户不耐烦,点击另一个用户(这里我想取消之前的填充,开始新的填充)

更新:我们保留两个 DataApdater(和两个 DataTable)并将一个数据表附加到 datagridview 并开始将数据异步加载到另一个数据表。加载数据时,我们只需将 datagridview 绑定(bind)到我们刚刚填充的 DataTable(并开始异步加载以前的数据表)这样 UI 将始终获取当前数据(无需用户等待 UI 刷新或挂起)

最佳答案

您可以向适配器构造函数提供一个 SqlCommand 并在其上调用一个 Cancel 方法。有一个原始模板:

class Model 
{
private SqlCommand loadUserCommand;
private DataTable userData;

public void LoadUser(string userId)
{
loadUserCommand = GetUserLoadCommandForUserID(userId);
userData = new DataTable("userData");
using (var adapter = new SqlDataAdapter(loadUserCommand))
{
adapter.Fill(userData);
}
}

public void AbortLoadUser()
{
if (loadUserCommand!= null)
loadUserCommand.Cancel();
}


private SqlCommand GetUserLoadCommandForUserID(string userId)
{
var connection = new SqlConnection("...");
var command = connection.CreateCommand();
...
}
}

关于c# - 取消 DataAdapter.Fill(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com