Csharp/C#教程:将数据异步加载到Windows窗体中的DataTable中分享


将数据异步加载到Windows窗体中的DataTable中

我正在修改旧的WinForms / ADO应用程序的数据访问层,以通过异步developerforce rest api使用soql来获取Salesforce对象。 以下方法通常有效,除了我的十三个表例程之一永远不会从AddMyTableRow(System.Data.DataRowCollection.Add())方法返回:

public void LoadData() { var tasks = new List<Task> { GetObject1Async(), GetObject2Async(),... GetObject13Async() }; Task.WaitAll(tasks.ToArray()); //do some postprocessing now that I have all the data } async Task GetObject1Async(){ var response = await cnx.QueryAsync("SELECT foo FROM bar").ConfigureAwait(false); foreach (var rec in response.Records){ var row = MyDataSet.MyTable.NewMyTableRow(); row.Name = rec.Name; ... MyDataSet.MyTable.AddMyTableRow(row); //<== Sometimes this never returns } return MyDataSet.MyTable.Count; } 

这甚至是正确的方法吗?

我发现,如果我注释掉整个等待cnx.Query …行,只需调用AddMyTableRow(dummyData)就行了。 我觉得有某种异步/线程/上下文正在发生,但由于它没有产生任何类型的错误或exception,我不知道该怎么做。

干杯,杰夫

您可以使用async方法返回Task ,然后以异步formsLoad事件处理程序,或者在要执行数据绑定的async方法中,等待调用它,然后使用结果绑定到网格。

上述就是C#学习教程:将数据异步加载到Windows窗体中的DataTable中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public async Task GetDataAsync() { var dt = new DataTable(); var cn = @"Your Connection String"; var cmd = @"SELECT * FROM Category"; var da = new SqlDataAdapter(cmd, cn); await Task.Run(() => { da.Fill(dt); }); return dt; } private async void Form1_Load(object sender, EventArgs e) { var data = await GetDataAsync(); this.dataGridView1.DataSource = data; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/991616.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐