将数据绑定到单独线程上的网格控件

时间:2012-06-20 18:05:40

标签: c# winforms parallel-processing task-parallel-library

我正在使用Tasks在单独的线程上获取数据,以便用户可以继续使用该应用程序。我发现的问题是我的数据与网格的实际绑定也需要几秒钟。如何在与FetchData()调用相同的线程上绑定我的数据?

Task<List<SomeData>> getData = new Task<List<SomeData>>(() =>
{
    List<SomeData> myData = FetchData(); // Expensive!
    return myData;
});

getData.Start();

Task processData = getData.ContinueWith(data =>
{
    grid.DataSource = data; // Takes a few second so now the UI thread is disrupted
}, TaskScheduler.FromCurrentSynchronizationContext()); // UI thread :(

1 个答案:

答案 0 :(得分:1)

如何使用BackgroundWorker?只需将backgroundboxer从工具箱中拉入表单,然后使用BackgroundWorker的RunWorkerAsync调用启动该过程。

DoWork事件中,执行数据提取。

RunWorkerCompleted事件中,将结果绑定到网格。