C# 将数据异步加载到datagrid中

C# 将数据异步加载到datagrid中,c#,wpf,visual-studio,datagrid,asynchronous,C#,Wpf,Visual Studio,Datagrid,Asynchronous,我正在datagrid视图中加载一些数据(1200000行),应用程序加载时间太长,有时会冻结 我不知道如何异步加载它们?(可能是progressBar) 我能在这里找到一些帮助吗?将数据加载分成更小的块,比如说一次100到1000行。如果WPF网格已数据绑定到您的数据集合,并且该集合是可观察的集合(实现INotifyCollectionChanged),则在向集合添加新数据时,WPF将自动更新显示 您还应该考虑使用虚拟化列表控件或网格与分页数据源相结合,以便只加载当前显示在屏幕上的数据(而不是

我正在datagrid视图中加载一些数据(1200000行),应用程序加载时间太长,有时会冻结

我不知道如何异步加载它们?(可能是progressBar)


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

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

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


查看这篇关于为虚拟列表框异步检索数据的SO文章:

我有一个应用程序,在其中我正在使用线程执行非常类似的操作。此代码应该在后台代码运行时一次更新一行数据网格

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)));   
    }    
}