(转)用后台线程对TreeView加载大量数据的探索(异步加载)

这几天我在弄TreeView,在节点比较多的时候会发现加载速度很慢,甚至
当机,解决的办法一般有分次加载(象CSDN社区),但是这样也有不好的
地方,就是当用户点击后才加载,会有点延迟,感觉不爽。

我现在的解决办法是页面请求的时候先输出第一层节点,等页面加载完毕后
用Microsoft.XMLHTTP对象广度优先对每个节点异步加载子节点,由于是异步,一般
用户感觉不到父节点在加载子节点,我这个测试用了4605个子节点
,历时30秒左右,在加载的同时还操作节点和界面。也欢迎大家一起来探讨你们的解决方法

主要思路:添加onload事件,等页面加载完毕后
1:将所有子节点加入队列,修改头指针和尾指针
2:while(队列)非空,读取一个节点,向页面请求子节点,设置请求完毕的回调函数,否则GOTO 5
3:如果请求完毕,添加所有的子节点,将所有子节点加入队列,释放队列中对应的父节点,修改头指针和尾指针
4:GOTO 2
5:完毕

在实际的browser环境里,js始终是单线程的但是通过创建COM组件等来实现多线程(象VB通过进程外组件来实现
多线程),因此为了不阻塞浏览器,一般都采用异步方式来调用,而这也是一般的Ajax 框架提供了默认方式。

ASPX文件:

Code

 

CS文件:

Code


 

 

posted on 2008-10-30 20:18  冷月孤峰  阅读(1149)  评论(0)    收藏  举报