C# 将数据绑定到单独线程上的网格控件
我使用任务在一个单独的线程上获取数据,以便用户可以继续使用应用程序。我发现的问题是,将数据实际绑定到网格也需要几秒钟。如何将数据绑定到与FetchData()调用相同的线程上C# 将数据绑定到单独线程上的网格控件,c#,winforms,parallel-processing,task-parallel-library,C#,Winforms,Parallel Processing,Task Parallel Library,我使用任务在一个单独的线程上获取数据,以便用户可以继续使用应用程序。我发现的问题是,将数据实际绑定到网格也需要几秒钟。如何将数据绑定到与FetchData()调用相同的线程上 Task getData=新任务(()=> { List myData=FetchData();//昂贵! 返回myData; }); getData.Start(); TaskProcessData=getData.ContinueWith(数据=> { grid.DataSource=data;//需要几秒钟,因此现在
Task getData=新任务(()=>
{
List myData=FetchData();//昂贵!
返回myData;
});
getData.Start();
TaskProcessData=getData.ContinueWith(数据=>
{
grid.DataSource=data;//需要几秒钟,因此现在UI线程中断
},TaskScheduler.FromCurrentSynchronizationContext());//UI线程:(
如何使用BackgroundWorker
?只需将BackgroundWorker从工具箱拉到表单中,然后使用BackgroundWorker的RunWorkerAsync调用启动流程
在DoWork
事件中,执行数据获取
在
RunWorkerCompleted
事件中,将结果绑定到网格。您使用的是什么?Winforms?WPF?其他?Winforms。抱歉,忘了提一下。您确定没有延迟执行问题吗?数据中有多少对象?例如,如果您使用启用延迟加载的ORM,实际绑定是在我没有使用ORM。它只是一些绑定到网格的基本对象的列表。有几千行…因此延迟。
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 :(