DataGrid 异步加载的问题

心态决定姿态 2013-12-25 11:12:52
我需要给datagrid绑定10多万数据,直接用ItemsSource绑定的时候会卡很长时间,如何实现异步加载,我写的多线程绑定没有效果,麻烦给看一下


ObservableCollection<NameInfo> nameList = new ObservableCollection<NameInfo>();
dgvDate.ItemsSource = nameList;
thread_create = new Thread(() =>
{
CreateName();
});
thread_create.Start();



public void CreateName()
{
List<NameInfo> list = NameClass.CreateNormalName();
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new updateDateGridDelegate(() =>
{
progress.Maximum = list.Count;
}));
for (int i = 0; i < list.Count-1; i++)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new updateDateGridDelegate(() =>
{
lock (nameList) //加载出来的数据会有很多重复的。貌似需要lock但是没效果
{
//dgvDate.Items.Add(list[i]);
nameList.Add(list[i]);
progress.Value = i;
}
}));
Thread.Sleep(1);//如果不休眠会卡主
}
}
...全文
519 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
海涵德 2014-03-01
  • 打赏
  • 举报
回复
只有使用分页,如果你的客户端的datagrid能够装载10完多的数据的话,也可以每次读一个页面的数据,异步相应后再读下一页数据直至完成。
灬浪子灬 2014-02-25
  • 打赏
  • 举报
回复
引用 楼主 cuole009 的回复:
我需要给datagrid绑定10多万数据,直接用ItemsSource绑定的时候会卡很长时间,如何实现异步加载,我写的多线程绑定没有效果,麻烦给看一下

 ObservableCollection<NameInfo> nameList = new ObservableCollection<NameInfo>();
 dgvDate.ItemsSource = nameList;
 thread_create = new Thread(() =>
            {
                CreateName();
            });
thread_create.Start();

 public void CreateName()
        {
            List<NameInfo> list = NameClass.CreateNormalName();
            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new updateDateGridDelegate(() =>
            {
                progress.Maximum = list.Count;
            }));
            for (int i = 0; i < list.Count-1; i++)
            {
                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new updateDateGridDelegate(() =>
                {
                    lock (nameList) //加载出来的数据会有很多重复的。貌似需要lock但是没效果
                    {
                        //dgvDate.Items.Add(list[i]);
                        nameList.Add(list[i]);  
                        progress.Value = i;
                    }
                }));
                Thread.Sleep(1);//如果不休眠会卡主
            }
        }
除了分页又什么更好的方法吗? 个人认为用分页比较友好
qdu123 2014-02-15
  • 打赏
  • 举报
回复
你要一次性显示这么多扛不住,建议分页
cchuaruxue 2014-01-26
  • 打赏
  • 举报
回复
数据量太大了,要么就分页,要么可以试试研究一下瀑布流
h598937749 2014-01-20
  • 打赏
  • 举报
回复
后台开线程猛扫数据,搞一个事件搜到数据就引发事件。窗体在事件中接收数据显示。把虚拟化打开 我现在这样搞貌似感觉不到慢 如果是在数据库表中取数据的话还是用分页吧
海涵德 2014-01-01
  • 打赏
  • 举报
回复
还是分页吧,10万多条记录不是线程能够解决的,datagrid也不能按线程绑定数据,一般都是一次性绑定。
「已注销」 2013-12-27
  • 打赏
  • 举报
回复
http://www.cnblogs.com/candyzkn/p/3494595.html
exception92 2013-12-26
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
是不是应该获取当前线程调度器??
/// <summary> /// 当前线程调度器 /// </summary> private readonly Dispatcher _dispatcher = Dispatcher.CurrentDispatcher; 然后配合委托试着编写一下代码。
exception92 2013-12-26
  • 打赏
  • 举报
回复
是不是应该获取当前线程调度器??
Bonjour-你好 2013-12-25
  • 打赏
  • 举报
回复
datagrid分页如何?

8,737

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧