Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据绑定到单独线程上的网格控件_C#_Winforms_Parallel Processing_Task Parallel Library - Fatal编程技术网

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

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;//需要几秒钟,因此现在

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

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 :(