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

5

我正在加载一些数据到datagrid视图中(120万行),但是应用程序需要花费太多时间来加载,有时会冻结。

我不知道如何异步加载它们?(也许使用进度条)。

我能在这里找到一些帮助吗?

2个回答

5

我有一个应用程序,其中我正在使用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)));   
    }    
}

3
将数据加载分成小块,每次处理100到1000行。如果WPF网格与您的数据集绑定,并且该集合是可观察的集合(实现INotifyCollectionChanged),则随着新数据添加到集合中,WPF将自动更新显示。
您还应考虑使用虚拟列表控件或网格与分页数据源结合使用,以便仅加载当前屏幕上显示的数据(而不是在内存中加载120万行数据)。这将为您执行“分块”,并使您能够使用非常少的内存使用或网络延迟向用户呈现基本上无限量的数据。
查看此SO文章,了解有关异步检索虚拟列表框的数据的详细信息:如何异步填充虚拟模式下的ListView?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接