【问题标题】:Binding data to a grid control on a separate thread将数据绑定到单独线程上的网格控件
【发布时间】:2012-11-16 15:59:06
【问题描述】:

我正在使用任务在单独的线程上获取数据,以便用户可以继续使用应用程序。我发现的问题是我的数据到我的网格的实际绑定也需要几秒钟。如何将我的数据绑定到与 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 :(

【问题讨论】:

  • 你在用什么?窗体? WPF?还有什么?
  • WinForms。抱歉,忘记提了。
  • 您确定没有延迟执行问题吗?数据中有多少个对象?
  • 例如,如果您使用启用延迟加载的 ORM,实际绑定将是当它调用加载您未急切加载的子实体时
  • 我没有使用 ORM。它只是绑定到网格的一些基本对象的列表。有几千行......因此延迟。

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


【解决方案1】:

使用BackgroundWorker 怎么样?只需将工具箱中的 backgroundworker 拉入表单,然后使用 BackgroundWorker 的 RunWorkerAsync 调用启动该进程。

DoWork 事件中,进行数据获取。

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

【讨论】:

  • 这没有帮助。主线程仍然会卡在 RunWorkerCompleted 事件上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多