将数据异步加载到数据网格中

本文关键字:数据 网格 数据网 加载 异步 | 更新日期: 2023-09-27 18:17:57

我正在加载数据网格视图中的一些数据(1,200,000行),应用程序加载时间太长,有时会冻结。

我不知道如何异步加载它们?(也许加上progressBar)。

我能在这里找到帮助吗?

将数据异步加载到数据网格中

我有一个应用程序,我正在使用Threading做一些非常类似的事情。当后面的代码运行时,这段代码应该一次一行地更新你的数据网格。

using System.Windows.Threading;
private void Run()
{
    try
    {
        var t = new Thread(Read) { IsBackground = true };
        t.Start();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
private void Read()
{
    foreach (/* whatever you are looping through */)
    {
        /* I recommend creating a class for the result use that for the 
           datagrid filling. */
        var sr = new ResultClass()
        /* do all you code to generate your results */
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
                               (ThreadStart)(() => dgResults.AddItem(sr)));   
    }    
}

将数据加载分成更小的块,例如一次100到1000行。如果WPF网格绑定到您的数据集合,并且该集合是一个可观察集合(实现INotifyCollectionChanged), WPF将在新数据添加到集合时自动更新显示。

您还应该考虑将虚拟列表控件或网格与分页数据源结合使用,以便只加载当前显示在屏幕上的数据(而不是内存中的120万行数据)。这将为您执行"分块",并使您能够以很少的内存使用或网络延迟向用户呈现基本上无限量的数据。

查看这篇关于为虚拟listbox异步检索数据的文章:如何在虚拟模式下异步填充ListView ?