listview显示文件数目有限制吗?

shuimuyi 2007-04-02 12:01:03
用treeview 和listview做的资源管理器
在treeview上双击树接点,打开一个文件夹的时候,当该文件夹下有很多.doc文件(2544个,共36.6 MB),要显示在listview中,这个时候加载显示抛出异常。请问各位这个异常该怎么解决才好呢?

听说是listview打开数量有限制 ,可能吧。具体不知道,所以来问下各位。谢谢了。
...全文
345 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuimuyi 2007-04-04
  • 打赏
  • 举报
回复
没有遇到没有图标句柄的文件。
FromHandle()和SHGetFileInfo()参数是有效的。

可能 读文件超时,可是 不知道该如何测试这个。
shuimuyi 2007-04-04
  • 打赏
  • 举报
回复
来通知下热心的朋友们。该问题总算是被处理掉了,可以松了口气了。
原来放在
DestroyIcon(fi.hIcon); // Cleanup
imageList.Images.Add(ic); //添加到ImageList,可放图标和图片,只做一个转换用
继续抛异常。
现在换为:
Icon ic=Icon.FromHandle(fi.hIcon);
imageList.Images.Add(ic); //添加到ImageList,可放图标和图片,只做一个转换用
DestroyIcon(fi.hIcon); // Cleanup
总算一切平安了。
shuimuyi 2007-04-04
  • 打赏
  • 举报
回复
LisrimageList.Images.Add(ic0);
LisrimageList2.Images.Add(ic0);

DestroyIcon(ic0.Handle); // 在这个地方新添加了 释放icon句柄的代码 异常仍然存在
listView1.Clear();
shoushii 2007-04-03
  • 打赏
  • 举报
回复
估计是读文件超时吧!
曲滨_銘龘鶽 2007-04-03
  • 打赏
  • 举报
回复
这个错误应该是 SHFILEINFO 就是错误的
是不是你遇到了没有图标句柄的,文件了

也就是说之前的 api 取得的
Icon.FromHandle(fi.hIcon);

这行出的错误,和 treeview 什么的一点关系也没有

出错的时候看看,fi 里面的其他信息是否都正常!
spkl1 2007-04-03
  • 打赏
  • 举报
回复
检查下FromHandle()和SHGetFileInfo()
参数是否有效
bitpolar 2007-04-02
  • 打赏
  • 举报
回复
这个异常应该不是因为数量引起的
貌似以前加载的数量比这个多的多
把你的异常详细信息贴出来把
shuimuyi 2007-04-02
  • 打赏
  • 举报
回复
按一个同仁的相同的异常开帖问题解决方法:
protected virtual Icon myExtractIcon(string FileName,int iIndex)
{
try
{
IntPtr hIcon=(IntPtr)ExtractIcon(this.Handle,FileName,iIndex);
if(! hIcon.Equals(null))
{
Icon icon=Icon.FromHandle(hIcon);
return icon;
}
}
catch(Exception ex)
{ MessageBox.Show(ex.Message,"1错误提示",0,MessageBoxIcon.Error);}
return null;
}


用if(hIcon != System.IntPtr.Zero) 替换 if(! hIcon.Equals(null)) 无作用。
shuimuyi 2007-04-02
  • 打赏
  • 举报
回复
刚刚用了一个简单版的测试了下。bug如下:

protected virtual void SetIcon(ImageList imageList,string FileName,bool tf)
{
SHFILEINFO fi=new SHFILEINFO();
if(tf==true)
{
int iTotal=(int)SHGetFileInfo(FileName,0,ref fi,100, 16640); //SHGFI_ICON|SHGFI_SMALLICON
try
{
if(iTotal >0)
{
Icon ic=Icon.FromHandle(fi.hIcon);
imageList.Images.Add(ic);
}
}
catch(Exception ex)
{ MessageBox.Show(ex.Message,"2错误提示",0,MessageBoxIcon.Error);}
}
else
{
int iTotal=(int)SHGetFileInfo(FileName,0,ref fi,100, 257);
try
{
if(iTotal >0)
{
Icon ic=Icon.FromHandle(fi.hIcon);
imageList.Images.Add(ic);
}
}
catch(Exception ex)
{ MessageBox.Show(ex.Message,"3错误提示",0,MessageBoxIcon.Error);}
}
}

异常信息:
传递到icon的win32句柄无效或者类型错误。

bitpolar 2007-04-02
  • 打赏
  • 举报
回复
加载之前先BeginUpdate
结束之后EndUpdate
shuimuyi 2007-04-02
  • 打赏
  • 举报
回复
谢谢FlashElf(銘龘鶽)提醒。知道了。
没帖代码的原因是,在treeview中打开其他的文件夹都没问题。只有打开这个大文件夹才出现异常。虽然抛异常,在listview中还是可以看到该文件夹下的文件的,加载很慢。
曲滨_銘龘鶽 2007-04-02
  • 打赏
  • 举报
回复
treeview 和listview 有限制不过很大
可能是 int32 的最大值

不过一般没等到那个数字,你就没内存了

CSDN 这地方帖子象洪水一样,如果问问题
最好写的详细点。

这样也好回答,要不下次谁还来找你这个贴。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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