在做一个文件浏览器的时候,如果是打开system32这样的目录的话,加载的速度实在是太慢了,而windows自带的explorer一瞬间就完了 private void fillFiles(string fullName)
{
fView.Clear();
statusBar1.Text=fullName;
this.textBox1.Text=fullName;
IconListManager _iconList=new IconListManager(sList,lList);
fView.Columns.Add("名称",fView.Width/3,HorizontalAlignment.Left);
fView.Columns.Add("扩展名(文件类型)",fView.Width/6,HorizontalAlignment.Left);
fView.Columns.Add("大小",fView.Width/6,HorizontalAlignment.Left);
fView.Columns.Add("访问时间",fView.Width/3,HorizontalAlignment.Left);
DirectoryInfo CurDir=new DirectoryInfo(fullName);
DirectoryInfo[] SubDirs=CurDir.GetDirectories();
FileInfo[] files=CurDir.GetFiles(); ListViewItem lviBack=new ListViewItem();
lviBack.Text="..";
lviBack.ImageIndex=1;

try
{
lviBack.Tag=CurDir.Parent.FullName.ToString();
}
catch(Exception ex)
{
lviBack.Tag="..";
}
fView.Items.Add(lviBack);
foreach(DirectoryInfo dir in SubDirs)
{
ListViewItem lvi=new ListViewItem();
lvi.Text=dir.Name;
lvi.ImageIndex=2;
lvi.Tag=dir.FullName;
lvi.SubItems.Add("");
lvi.SubItems.Add("");
lvi.SubItems.Add(dir.LastAccessTime.ToString());
fView.Items.Add(lvi);
} foreach(FileInfo file in files)
{
ListViewItem lvi=new ListViewItem();
lvi.Text=file.Name;
lvi.Tag=file.FullName;
lvi.ImageIndex=_iconList.AddFileIcon(file.FullName);
lvi.SubItems.Add(file.Extension.ToString().Replace(".","").ToUpper());
lvi.SubItems.Add(file.Length.ToString());
lvi.SubItems.Add(file.LastAccessTime.ToString());
fView.Items.Add(lvi);
} }

解决方案 »

  1.   

    不用一次全部添加所有的数据,只需要添加n个空lvi就可以了,
    for(i=0; i<n; i++) lv.items.add("")
    这样速度很快,然后就必须要响应listview的DrawItem事件了,在DrawItem事件里自己重画一个Item就可以,不过vs.net里响应DrawItem事件有点难度,我记得应该是 WM_REFECT + WM_DRAWITEM 吧,具体自己去查找资料,继承ListView控件,然后重写WndProc函数响应DrawItem事件就可以了。