读书人

winform多线程分块下载文件 -分享解决

发布时间: 2014-01-22 14:50:12 作者: rapoo

winform多线程分块下载文件 ----分享


public class DownloadThread
{
private string saveFilePath;
private Uri downUrl;
private long block;
private int threadId = -1;
private long downLength;
private bool finish = false;
private FileDownloader downloader;

public DownloadThread(FileDownloader downloader, Uri downUrl, string saveFile, long block, long downLength, int threadId)
{
this.downUrl = downUrl;
this.saveFilePath = saveFile;
this.block = block;
this.downloader = downloader;
this.threadId = threadId;
this.downLength = downLength;
}


public void ThreadRun()
{
//task
Thread td = new Thread(new ThreadStart(() =>
{
Console.WriteLine(threadId.ToString() + " start " + downLength.ToString() + " " + block.ToString());
if (downLength < block)//未下载完成
{
try
{
int startPos = (int)(block * (threadId - 1) + downLength);//开始位置
int endPos = (int)(block * threadId - 1);//结束位置
Console.WriteLine("Thread " + this.threadId + " start download from position " + startPos + " and endwith " + endPos);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(downUrl);
request.Referer = downUrl.ToString();
request.Method = "GET";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)";
request.AllowAutoRedirect = false;
request.ContentType = "application/octet-stream";
request.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
request.Timeout = 10 * 1000;
request.AllowAutoRedirect = true;


request.AddRange(startPos, endPos);
//Console.WriteLine(request.Headers.ToString());
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
WebResponse wb = request.GetResponse();
using (Stream _stream = wb.GetResponseStream())
{
byte[] buffer = new byte[1024 * 50];
long offset = -1;
using (Stream threadfile = new FileStream(this.saveFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
threadfile.Seek(startPos, SeekOrigin.Begin);
while ((offset = _stream.Read(buffer, 0, buffer.Length)) != 0)
{
downloader.append(offset);
threadfile.Write(buffer, 0, (int)offset);
downLength += offset;
downloader.update(this.threadId, downLength);
}
threadfile.Close();
_stream.Close();
Console.WriteLine("Thread " + this.threadId + " download finish");
this.finish = true;
}
}
}
catch (Exception e)
{
this.downLength = -1;
Console.WriteLine("Thread " + this.threadId + ":" + e.Message);


}
}
else
{
Console.WriteLine(downLength);
}
}));
td.IsBackground = true;
td.Start();
}
/// <summary>
/// 下载是否完成
/// </summary>
/// <returns></returns>
public bool isFinish()
{
return finish;
}
/// <summary>
/// 已经下载的内容大小 ;return 如果返回值为-1,代表下载失败
/// </summary>
/// <returns></returns>
public long getDownLength()
{
return downLength;
}

}



winform多线程分块下载文件 -分享解决思路
winform多线程分块下载文件 -分享解决思路winform多线程分块下载文件 -分享解决思路

不想重新写啦..直接看我博客园的文章吧(不会说我打广告吧.最讨厌了.)
最后有源码
链接地址

[解决办法]
winform多线程分块下载文件 -分享解决思路winform多线程分块下载文件 -分享解决思路winform多线程分块下载文件 -分享解决思路
[解决办法]
winform多线程分块下载文件 -分享解决思路
[解决办法]
非常不错,最近刚好用到,感谢楼主无私分享。
楼下的,技术贴不顶,写代码一堆bug
[解决办法]
学习了,不错的好帖
[解决办法]

[解决办法]
winform多线程分块下载文件 -分享解决思路
[解决办法]
winform多线程分块下载文件 -分享解决思路
nice
[解决办法]
学习了,不错的好帖
[解决办法]
好帖,winform多线程分块下载文件 -分享解决思路,再加一个上传的,winform多线程分块下载文件 -分享解决思路
[解决办法]
,再加一个上传的,winform多线程分块下载文件 -分享解决思路

上传的原理也差不多的嘛
[解决办法]
不错,有空研究下。
[解决办法]
感谢楼主分享winform多线程分块下载文件 -分享解决思路
[解决办法]
看看是什么~
[解决办法]
learning
[解决办法]
winform多线程分块下载文件 -分享解决思路
mark
[解决办法]
winform多线程分块下载文件 -分享解决思路
[解决办法]
学习了!估计很快就能用得上!
[解决办法]
不错哟 攻城狮很牛x的样子
[解决办法]
下载技术被几家垄断了,由商业利益驱动了,要是不断有高手做些这样的小下载工具就好了
------解决方案--------------------


winform多线程分块下载文件 -分享解决思路
[解决办法]
winform多线程分块下载文件 -分享解决思路
[解决办法]
这个法子真好。
[解决办法]
很专业的说啊
[解决办法]
最近在研究这我喜欢,多谢楼主分享
[解决办法]
必须先顶 后学习
[解决办法]


[解决办法]
winform多线程分块下载文件 -分享解决思路
[解决办法]
学习了,谢谢楼主分享
[解决办法]
好牛X的感觉
[解决办法]
还不错额虚心学习
[解决办法]
不错,可以省点事,最好把限速也做了。
[解决办法]
不错,顶 。。。。。。。。。。。。。。。。。
[解决办法]
学习了!谢谢分享!
[解决办法]
zhichi haowenzhang
[解决办法]
不,收藏起。
分享

读书人网 >C#

热点推荐