将数据异步加载到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