我正在使用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 :(
答案 0 :(得分:1)
如何使用BackgroundWorker
?只需将backgroundboxer从工具箱中拉入表单,然后使用BackgroundWorker的RunWorkerAsync调用启动该过程。
在DoWork
事件中,执行数据提取。
在RunWorkerCompleted
事件中,将结果绑定到网格。