找回密码
 立即注册

QQ登录

只需一步,快速开始

sgs

中级会员

74

主题

219

帖子

637

积分

中级会员

积分
637

活字格认证微信认证勋章

sgs
中级会员   /  发表于:2013-10-22 15:53  /   查看:5031  /  回复:5
用cell显示网络图片显得太卡
主要是把网络图片下载到本地需要时间,每行显示一张图,行数多了,速度慢的更不行
不知有没有好的解决方案
下载用的是
WebClient wc = new WebClient();
wc.DownloadFile(ImageUrl, FileInfo);

5 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2013-10-22 16:48:00
沙发
回复 1楼sgs的帖子

涉及网络图片下载慢的,一般采用“曲线救国”思路。
下面3种办法你可以试试:
方案一: 启动多线程下载图片,下载完成后,再逐个更新cell
方案二: 默认显示一个本地图片,当用户点击cell再去下载图片。
方案三: 如果知道是那些图片,可以预先缓存下来图片。
回复 使用道具 举报
sgs
中级会员   /  发表于:2013-10-24 10:02:00
板凳
每个row添加一个c1picturebox,然后异步加载图片似乎可行,但是滚动记录时,该控件不会随之上下滚动,无法在同一行显示,请问有无方法解决?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-10-24 11:46:00
地板
回复 3楼sgs的帖子

我是通过如下办法实现的:
1 初始化添加列-- typeof(Image);:
  1.             Column imageCol = c1FlexGrid2.Cols[10];
  2.             imageCol.Caption = "Images";
  3.             imageCol.DataType = typeof(Image);
  4.             imageCol.ImageAlign = ImageAlignEnum.CenterCenter;
  5.             imageCol.Width = 200;

  6.                       this.c1FlexGrid2.Click += c1FlexGrid2_Click;
复制代码


2 点击事件响应:

  1.   
  2. private void c1FlexGrid2_Click(object sender, EventArgs e)
  3.         {
  4.           /*下载图片*/
  5.             string path = AppDomain.CurrentDomain.BaseDirectory + "googleSync.PNG";
  6.             this.c1FlexGrid2[this.c1FlexGrid2.Selection.r1, 10] = Image.FromFile(path);

  7.             this.c1FlexGrid2.Rows[this.c1FlexGrid2.Selection.r1].Height = 200;
  8.         }
复制代码



没有用到你说的C1Picturebox,你试试上面的代码,看看能行不?
回复 使用道具 举报
sgs
中级会员   /  发表于:2013-10-24 18:26:00
5#
用C1Picturebox解决了,把所有C1Picturebox纵向放在一个panel中,然后同步控制flexgrid的scrollposition与panel的AutoScrollPosition 就行了,基本达到要求。
4楼的方法暂时没试验,不过先留着,非常感谢楼上的答复。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-10-24 18:44:00
6#
回复 5楼sgs的帖子

好的,学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部