多线程下载图片为什么我查看图片提示图片已经损坏。。

tanaichuan 2013-07-15 06:00:00
程序在运行的时候会有图片查看是损坏,然后运行完毕所有图片都没有了。。。




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
using System.Threading;
namespace TacCs2013.Caiji
{
public partial class Caiji : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{

}
}

protected void btnOK_Click(object sender, EventArgs e)
{







// 取得输入的URL地址
string PageUrl = txtUrl.Text;
WebClient wc = new WebClient();
//把已登录的用户或正被模拟的用户的用户凭据赋给用于对向Internet资源的请求进行身份验证的网络凭据
wc.Credentials = CredentialCache.DefaultCredentials;
///从指定的URI下载数据
Byte[] pageData = wc.DownloadData(PageUrl);
//把下载到的字符型数组数据转换成字符串类型
// lblc.Text = Encoding.UTF8.GetString(pageData);
string sHTML = Encoding.UTF8.GetString(pageData);

//取得网站路径
ArrayList alURL = GetHyperLinks(sHTML);//取得所有网站链接
string sUrl = "";//网站链接路径
int alurlcount = alURL.Count;//共有多少链接路径。创建多少个线程
countUl.Text = "共有" + alurlcount + "条路径。";
Thread[] thurl = new Thread[alurlcount];
string urlName = "";
for (int i = 0; i < alURL.Count; i++)
{
sUrl = alURL[i].ToString();
urlName += "||" + sUrl;
thurl[i] = new Thread(new ParameterizedThreadStart(delegate { images(htmls(sUrl), sUrl); }));
thurl[i].Start();

}





lblurlname.Text = urlName;

}





/// <summary>
/// 取得网站源码
/// </summary>
/// <param name="urlName">要获取的网站</param>
/// <returns>返回源码</returns>
public string htmls(string urlName)
{
//取得输入的URL地址
string PageUrl = txtUrl.Text;
WebClient wc = new WebClient();
//把已登录的用户或正被模拟的用户的用户凭据赋给用于对向Internet资源的请求进行身份验证的网络凭据
wc.Credentials = CredentialCache.DefaultCredentials;
///从指定的URI下载数据
Byte[] pageData = wc.DownloadData(PageUrl);
//把下载到的字符型数组数据转换成字符串类型
// lblc.Text = Encoding.UTF8.GetString(pageData);
string sHTML = Encoding.UTF8.GetString(pageData);

return sHTML;
}
/// <summary>
/// 取得网站图片
/// </summary>
/// <param name="shtml">网站源码</param>
/// <param name="PageUrl">当前网站地址</param>
public void images(string sHTML, string PageUrl)
{

//取得网站图片路径
string imageurl = "";
string[] Simages = GetHtmlImageUrlList(sHTML);

int cg = 0;//成功多少张图片
string fromURL = "";
lblc.Text = "共有:" + Simages.Length + "张图片。";
WebClient myWebClient = new WebClient();





string savePath = "";//图片路径
string filetac = @"D:\\caiji\\";//文件路径
for (int i = 0; i < Simages.Length; i++)
{

imageurl = Simages[i].ToString();
//存入图片
fromURL = "http://www.baidu.com/img/lm.gif";
if (imageurl.Length > 7)
{
if (imageurl.ToString().Substring(0, 7) != "http://")
{
if (imageurl.Substring(0, 2) == "..")
imageurl = imageurl.Substring(2, imageurl.Length - 2);
else if (imageurl.Substring(0, 1) != "/")
imageurl = "/" + imageurl;

fromURL = PageUrl + imageurl;
}

else
fromURL = imageurl;
}
else
{
fromURL = imageurl;
}



try
{
string fileName = imageurl.Substring(imageurl.LastIndexOf("/"));
fileName = new DateTime().Millisecond + fileName.Substring(1, fileName.Length - 1);
savePath = Server.MapPath(fileName);
cg++;
myWebClient.DownloadFile(fromURL, filetac + fileName);
}
catch (Exception ex)
{
continue;
}
finally
{

myWebClient.Dispose();
}




}

lblcg.Text = "成功了:" + cg + "张图片。其中" + (Simages.Length - cg) + "张图片路径不符。跳出了下载!";
lblImageURL.Text = "图片路径为:" + filetac;
}

//遍历网站的链接
public ArrayList GetHyperLinks(string htmlCode)
{
ArrayList al = new ArrayList();

string strRegex = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";

Regex r = new Regex(strRegex, RegexOptions.IgnoreCase);
MatchCollection m = r.Matches(htmlCode);

for (int i = 0; i <= m.Count - 1; i++)
{
bool rep = false;
string strNew = m[i].ToString();

// 过滤重复的URL
foreach (string str in al)
{
if (strNew == str)
{
rep = true;
break;
}
}

if (!rep) al.Add(strNew);
}

al.Sort();

return al;
}

/// <summary>
/// 取得HTML中所有图片的 URL。
/// </summary>
/// <param name="sHtmlText">HTML代码</param>
/// <returns>图片的URL列表</returns>
public static string[] GetHtmlImageUrlList(string sHtmlText)
{
// 定义正则表达式用来匹配 img 标签
Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);

// 搜索匹配的字符串
MatchCollection matches = regImg.Matches(sHtmlText);

int i = 0;
string[] sUrlList = new string[matches.Count];

// 取得匹配项列表
foreach (Match match in matches)
sUrlList[i++] = match.Groups["imgUrl"].Value;

return sUrlList;
}

//取得网站迅雷下载连接
public static string[] GetHtmlXunlei(string sHtmlText)
{


// 定义正则表达式用来匹配 img 标签
Regex regImg = new Regex(@"/^thunder:\/\//", RegexOptions.IgnoreCase);

// 搜索匹配的字符串
MatchCollection matches = regImg.Matches(sHtmlText);

int i = 0;
string[] sUrlList = new string[matches.Count];

// 取得匹配项列表
foreach (Match match in matches)
sUrlList[i++] = match.Groups["imgUrl"].Value;

return sUrlList;
}


}
}




求解决。。。。
...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanaichuan 2013-07-16
  • 打赏
  • 举报
回复
虽然没想要的答案。。还是谢谢了给分
饕餮123 2013-07-15
  • 打赏
  • 举报
回复
不建议在asp.net下面跑多线程,你可以建一个控制台程序,然后调用
tcmakebest 2013-07-15
  • 打赏
  • 举报
回复
多线程在运行中时,单击事件就已经返回了,那时图还没有下载完,应该等线程全部结束后再返回。
tanaichuan 2013-07-15
  • 打赏
  • 举报
回复
谁给解决下、、、、、是不是线程问题????
tanaichuan 2013-07-15
  • 打赏
  • 举报
回复
谁来回答下么。。。。。。。。。。。。。
最近抽空写了一个私人文件库管理工具.也是顺手用来测试俺的那个界面的.希望各位来帮我看看,提提意见,非常感谢. UNICODE+UTF8编码.文件库没有体积限制. AES256位加密,可以最大可能地保护用户隐私(并不像WINRAR那些有文件格式标志). 打开文件之后可以很方便地修改密码(爱什么时候改密码都可以),密码采用UNICODE编码,可以用韩文做密码,但是一设置了密码请不要忘记,否则将不能打开原来的文件库.因为密码不保存在库里面. 多页面管理,可以同时打开多个文件库. JPEG,GIF等图片内存中预览 可以很方便地为其中的目录,文件改名字.可以一次过添加一个或多个文件或者目录到库里面. 可以在不同的库中移动或者复制一个或多个文件/或者目录. 可以在同一个库中移动选中的一个或多个文件/或者目录(同一个库中不支持复制粘贴功能,因为没有意义). 还可以把通过拖放的方式把外部的文件直接拉进库里面. 直接双击打开体积较小的文件,例如图片,TXT文档等. 因为打开的文件利用的是API HOOK技术,不会有临时文件生成.不会被临时文件泄漏你的隐私.但是此功能会被一些像360之类的杀毒软件所提示. ...... 需要注意的是文件库改动的时候,如果遇到停电之类的突发事件,库文件将很可能损坏,重要的库文件先备份. 文件库没有体积大小限制(理论上),可以添加好几G的电影,此软件暂时采用单线程处理,所以添加大文件的时候界面会假死,如果各位觉得这软件还可以.我再考虑多线程实现. 非常感谢.
请先阅读帮助文档:http://ismyway.com/help [2009.1.1] Ver 3.2.26 ※如果安装提示证书过期或无法安装,请在手机上将时间改为2008.8.8,安装设置完成后再将日期改回即可!※ 增加天语的按键映射 增加三星的背景灯控制功能(该功能未在真机上测试过) 删除图片浏览中的部分功能,由于这部分功能需要较大的内存,导致在大部分手机上无法完成,同时也引起背景图片无法设置成功 触摸屏用户可以不再受滚动条限制,在屏幕上任意地方都可以进行拖动 选择键盘映射为其它时无法再次更改的BUG 用户输入的颜色值无法保存的BUG 修正英文单词分词时会多添加一个空行的BUG 繁体语言措词上的修正 阅读设置中增加一个“文件缓存”选项,默认情况下是开启的,在NOKIA手机上会提高UMD等文件的表现,但由于测试并不充足,如果程序经常在阅读时出错,请关闭该选项(其它手机是否开启该选项并无明显的影响) 修正编辑文件后无法保存的BUG [2008.10.27] Ver 3.2.24 ※如果安装提示证书过期或无法安装,请在手机上将时间改为2008.8.8,安装设置完成后再将日期改回即可!※ 改进的颜色选择方式 允许用户重新选择键盘映射 HTML阅读时的错误 进一步完善编辑功能(仍有少许BUG,请继续反馈,谢谢) 新建文件后自动跳转到编辑中 改进的文件操作方式,速度轻微提升 UMD速度明显提升,并且减少内存占用,特别是在NOKIA手机上,表现提升超过600% 改进的输入框模式,以使得能适应更多的手机如天语等 [2008.10.21] Ver 3.2.23 为了提高运行效率,以下功能在LITE上将被取消(自定义欢迎页问候语;欢迎页背景图) 取消了JAR的支持,提高运行效率 修正打开大ZIP文件时的内存溢出错误 ·修正:  自动滚屏到末尾时,滚屏功能将停止 [2008.10.4] Ver 3.2.22 暂时删除了播放功能及网络相关的功能,由于以上两项功能一直没有能稳定下来,故暂时删除 增强了ZIP功能,支持带文件夹结构的ZIP/JAR文件 (对于大部分JAR电子书都,可以从文件管理器中找到非.class结尾的文件,并且选择打开为UNICODE/TXT阅读) (对于NOKIA手机及其它部分手机,由于安全策略的限制,在Anyview的文件管理器中无法查看后缀为.jar的文件) 自定义问候语(系统路径下dictum.rc文件,格式参见jar包中的dictum.rc文件,保存时使用UTF-8编码,可写条目为0~9/a~z/A~Z,置空时表示不显示问候语) ·修正:  0键在各偏好中切换时亮度混乱的问题  部分手机上无法新建文件夹 [2008.9.11] Ver 3.2.21 修正动画参数无法保存的BUG 动画效果不再对阅读翻页有作用 [2008.8.29] Ver 3.2.21 可将正在阅读的内容通过短信与好友分享 增加一种新的滚屏方式:波浪,同时,阅读时3键不再使用默认的像素滚屏,而会使用最后一次使用的滚屏方式 任何可用的外置字库都可以作为内置字库存在,在jar包中存在dot.font会被当为内置字库加载 加快大文件的打开速度,特别是对于NOKIA手机,S60上,打开20M文件,97%左右的位置不超过15秒 允许用户打开动画效果 ·M600/P990/P1/W950  修正键盘映射时“内存不足”的BUG ·E680/A780  选中后台播放后无法启动的BUG [2008.7.30] Ver 3.2.20 调整部分索爱手机上背景灯控制的逻辑 修正看图片时按0键出错的BUG 旋转屏幕引起的字外出 打开LRC最后出错 阅读到尾部弹出“上一个/下一个”窗口中的文件名过长不刷新的问题 偏好切换时亮度混乱的问题 在NOKIA上,当系统路径设置为根目录是无法启动的BUG E398上可以开关键盘灯 UIQ系统在退出时可以保持亮度 索爱上按“返回”键后导致阅读出现白屏的BUG 阅读时切换屏幕方向导致字体超出屏幕的BUG 欢迎屏幕上的日期使用中文显示 如果使用触屏手机,跳转改为进度条模式,以方便触屏操作 系统路径下如果存在bg.png文件,则会作为欢迎界面的背景图片显示(右下角) 减少跳转及翻页中出现乱码的机率 提高阅读时绘图效率,滚屏效率同样提高 播放时,暂停会导致声音爆至最大的BUG 内置“忘记月亮”制作的两款主题《典雅红》《黑橙》,并且更换主题不再要求退出 文件管理器中支持“剪切”功能 文件管理器中新增转换UMD为TXT的功能(解开操作,解开2无效!) 增加了编辑功能(尽管没有限制文件大小,但请别编辑过大的文件,另外,为了提高速度,不进行全文排版,有时候表现可能会有些不习惯),以后会进一步完善 启动时,会自动识别NOKIA、SONYER
极限数据恢复专业版软件,本软件免费使用,不限恢复文件个数,不限恢复文件大小!可以有效解决各种软件、病毒或人为误操作引起的文件、数据丢失问题!比如:硬盘重新分区了,重装系统后只剩一个盘,分区合并数据丢失、磁盘未初始化,误删除文件、文件或目录损坏且无法读取、分区无法访问、磁盘参数错误、函数不正确、设备未就绪、设备硬件出现致命错误,导致请求失败、数据错误循环冗余检查、由于IO设备错误,无法运行此项请求、执行页内操作时的错误、此卷不包含可识别的文件系统、操作无法完成,因为磁盘管理控制台视图不是最新状态、误格式化分区、误分区、文件不能复制、分区打不开、提示RAW等都可以完美恢复出数据是一款专业级别的数据恢复软件。 软件特色 1、支持多种设备:硬盘、移动硬盘、U盘、sd卡、内存卡、相机卡、手机卡等多种存储设备; 2、支持多种分区方式和文件系统:传统的MBR分区方式、最新GPT分区方式、动态磁盘卷、FAT16/FAT32/NTFS/exFAT等文件系统; 3、支持多种文件格式:jpg、jpeg、bmp、png等常见图片格式,doc、xls、ppt等办公文件格式,html、PHP、txt等文本格式,mp3、mp4、rm、mkv等多媒体格式,rar、7z、zip等压缩文档格式,总计支持数百种文件格式; 4、兼容全线Windows系统:完美兼容Win2000、WinXp、Win2003、Win2008、Vista、Win7、win8、Win10、WinAll; 5、急速扫描智能分析:基于底层存储技术,扫描速度极快,多线程分析处理数据,不用完全扫描即可分析全盘数据 使用方法 1. 打开软件后,选择需要恢复的盘,点《开始恢复》 2. 等待软件扫描完成. 3. 勾选需要恢复的文件,点《另存为》按钮。 4. 选择合适的文件保存路径,等待软件将数据全部复制出来就可以。
2020.04.02 F 修复 32 位系统无法编译小程序、提示重启耗时过久的问题 反馈详情 F 修复 使用 cli 打开 project.config.json 中 projectname 为中文的项目时会一直卡在初始化应用通信能力的问题 反馈详情 F 修复 ts 项目编译前命令无限执行的问题 反馈详情 F 修复 PC 端模拟器的 touchend 事件回调参数 changedTouches 为空的问题 反馈详情 2020.03.25 更新说明 A 新增 云开发控制台支持开通按量付费 A 新增 云开发支持数据库备份与回档(还原)详情 A 新增 支持小程序自动化多帐号调试 A 新增 显示灰度中的基础库以及基础库支持的客户端版本 详情 A 新增 下发测试基础库 详情 A 新增 支持模拟 API 的返回内容 详情 A 新增 支持同时重命名多个同名的文件 A 新增 真机调试出现异常时,可手动操作重试 A 新增 增加工具加载 loading 展示 A 新增 模拟器支持终止 A 新增 支持小游戏代码补全 U 优化 模拟器工具栏及状态栏界面 U 优化 云开发控制台监控图表展示 U 优化 模拟器添加边框 反馈详情 U 优化 更新命令行和 HTTP v2 版本 详情 F 修复 修改 cloudFunctionRoot 会出现文件找不到的问题 反馈详情 F 修复 不能正确打开已被删除文件夹的项目的问题 F 修复 点击菜单工具栏管理无反应的问题 F 修复 工具外修改项目配置 cli 上传不生效的问题 F 修复 工具预览/上传提示文件已经存在的问题 反馈详情 F 修复 调试器放大会导致 inspect 按钮样式异常的问题 F 修复 模拟器工具栏样式异常 F 修复 wx.addPhoneContact时顶部按钮显示错误的问题 反馈详情 F 修复 标题栏文字过长覆盖胶囊按钮的问题 F 修复 文件系统读取代码包内文件规则与真机不一致的问题 F 修复 关闭多帐号调试窗口 tabbar 内的 icon 无法加载的问题 反馈详情 F 修复 预览上传错误提示无效的 json 文件 反馈详情 F 修复 使用非等宽字体时光标可能错位的问题 F 修复 某些项目可能出现 wxml not found 的问题 F 修复 真机调试 Appdata 和 WXML 面板可能显示空白的问题 F 修复 弹出模拟器时 getMenuButtonBoundingClient 调用结果为空的问题 A 新增 支持小程序自动化截图功能 A 新增 编辑器面包屑导航条支持自定义快捷导航 A 新增 模拟小程序进程销毁重启 A 新增 编辑器行内错误和警告提示 A 新增 Mac 和 Windows 微信的模拟器类型 U 优化 1.02.1912261 的安装包结构 U 优化 MacOS 版关闭项目窗口时,显示项目列表窗口 U 优化 插件开发模式下 miniprogramRoot 下 app.json 中插件 provider 与项目 appid 一致时,version 必须为 "dev" F 修复 1.02.1912261 引入的多帐号调试 tabBar 图标无法加载的问题 F 修复 1.02.1912261 引入的 jsserverRoot 目录右键菜单缺失部分选项的问题 F 修复 公众号网页调试中,Base64 图片无法通过调试器打开的问题 反馈详情 F 修复 cli 调用自动预览无法使用自定义编辑条件的问题 F 修复 Windows 版无法使用录音功能的问题 F 修复 插件开发模式下,插件页面配置不生效的问题 F 修复 小游戏开放数据域使用增强编译报错的问题 F 修复 Windows 版某些情况下无法显示项目窗口的问题 F 修复 切换 cloudfunctionsRoot 无法同步云函数的问题 反馈详情 F 修复 Wxml 面板丢失 text 标签子节点的问题 F 修复 上传时文件体积大小提示错误问题 反馈详情 F 修复 使用非等宽字体时光标可能错位的问题 F 修复 文件系统 api 读取代码包内文件规则与真机不一致的问题 A 新增 编辑器全局替换 A 新增 编辑器分栏 A 新增 编辑器文件多选操作和拖动到文件夹 A 新增 编辑器多选操作和拖动到文件夹 A 新增 编辑器代码大纲 A 新增 编辑器文件对比 A 新增 选取 android 设备上的 profile 文件进行分析 详情 A 新增 WXML 面板支持自定义组件数据查看与实时修改 A 新增 WXML 面板支持使用键盘 (上下左右) navigate the DOM tree A 新增 WXML 面板

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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