异步等待绑定网格

时间:2014-02-23 21:03:47

标签: c# asynchronous task

我正在尝试在单独的线程中绑定gridview

几乎每个示例在描述长时间运行的任务时都使用await Task.Delay(10000);,但我实际上想在这里做一些工作。

如何绑定网格异步(或一般的任何工作)?

private async void BindGrid_Click(object sender, EventArgs e)
{

        string result = await BindFileGridTemp();
        RadMessageBox.Show(result);

}

public async Task<string> BindFileGridTemp() // Bind Grid
{ 


       // Bind Grid here.........
       //this.radGridViewFiles.DataSource = null;
       //this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl.ToList()

       await Task.Delay(10000); // I dont want this but its on every example for async and await
       return "I am finished"; 

 }

1 个答案:

答案 0 :(得分:2)

  

我正在尝试将gridview绑定在一个单独的线程中。

正如其他人所说,你实际上无法在另一个线程中进行绑定;它必须是UI线程。

  

几乎每个例子都使用等待Task.Delay(10000);当他们描述一个长期运行的任务时,我实际上想在这里做一些工作。

await Task.DelayThread.Sleep的异步等价物。它只是意味着“放置你必须做的异步工作”。

  

如何绑定网格异步(或一般的任何工作)?

可以这么简单:

public async Task<string> BindFileGridAsync()
{ 
  this.radGridViewFiles.DataSource = await GetMyDatasourceAsync();
  return "I am finished"; 
}

请注意,这与MVVM模式不符。要遵循MVVM模式,请实现Peter Ritchie的建议:将RadGridView.DataSource XAML属性数据绑定到ViewModel属性,在创建ViewModel时启动异步操作,并使用结果值更新属性。如果您正在进行异步数据绑定,我有一个blog post that may help