c# 怎么实现下载 实现下载 暂停 又开始下载 怎么实现下载 实现下载 暂停 又开始下载 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 暂停下载需要服务器的支持。一些http服务器支持分块传输,否则无法实现。原理是首先获得文件大小,在本地磁盘上建立同样大小的空白文件。然后分块从服务器中下载并填充它们,直到全部完成。 大侠 给点代码看看呗。。或者发到邮箱[email protected] http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M /// c#,.net 下载文件 /// </summary> /// <param name="URL">下载文件地址</param> /// /// <param name="Filename">下载后的存放地址</param> /// <param name="Prog">用于显示的进度条</param> /// public void DownloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog, System.Windows.Forms.Label label1) { float percent = 0; try { System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); long totalBytes = myrp.ContentLength; if (prog != null) { prog.Maximum = (int)totalBytes; } System.IO.Stream st = myrp.GetResponseStream(); System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create); long totalDownloadedByte = 0; byte[] by = new byte[1024]; int osize = st.Read(by, 0, (int)by.Length); while (osize > 0) { totalDownloadedByte = osize + totalDownloadedByte; System.Windows.Forms.Application.DoEvents(); so.Write(by, 0, osize); if (prog != null) { prog.Value = (int)totalDownloadedByte; } osize = st.Read(by, 0, (int)by.Length); percent = (float)totalDownloadedByte / (float)totalBytes * 100; label1.Text = "当前补丁下载进度" + percent.ToString() + "%"; System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息 } so.Close(); st.Close(); } catch (System.Exception) { throw; } } }} 暂停? 下载放线程中 bool值控制 if(true) Sleep(1000) +++暂停就是:1、客户端记录当前下载位置;2、客户端停止下载,关闭流;3、服务器端会出现异常,没关系,结束发送线程就是了。继续就是:1、客户端请求发送文件,并给出起始位置;2、服务器端读取文件,并从起始位置开始发送。 so.Seek(0, SeekOrigin.Begin);//设置当前流的位置 跳过已经下载的while (osize != (-1)&&isStop!=true) //isStop初始化为false,当我触发“暂停”按钮时执行isStop=true; 通过判断isStop的值来中断下载流。 昨天 yes16ws 大侠 告诉我的 我没弄出来 不知你说的sleep是不是这个意识。 sleep不行的,时间稍长就会被服务器踢掉了。 http://download.csdn.net/detail/yes16ws/4124161有事耽搁了 表示抱歉 忘给你分了 。。sorry 暂停不要想得那么复杂,只要给文件的对象添加一个属性,IsStop,然后在while读取文件时,判断IsStop是否为true,为true,就代表暂停了,你那个暂停的按钮可以控制这个IsStop的值,点击了暂停,就将这个对象的IsStop设置为false there are many ways to deal with, you can select any one 请问在WPF中如何设置窗口不显示边框呢? CS模式下缓存的问题 请问。。。 DataList存储过程分页代码 最要带注释的 我是新手 谢谢 刷新页面时,如何保留动态生成的RadioButtonList的选择状态 为什么在我的机器内alert("") ""中只能是英文 为什么用C#编写的木马修改注册表不执行 如何让datagridview全选的时候,不包含行标列? 关于vs2005自带的report view的问题 syntax highlight 源码30分出售 以“ while(1);”加换行 是什么数据格式,怎么解析啊?! 有没有关于SCSF的比较好的教程?
/// </summary>
/// <param name="URL">下载文件地址</param>
///
/// <param name="Filename">下载后的存放地址</param>
/// <param name="Prog">用于显示的进度条</param>
///
public void DownloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog, System.Windows.Forms.Label label1)
{
float percent = 0;
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
if (prog != null)
{
prog.Maximum = (int)totalBytes;
}
System.IO.Stream st = myrp.GetResponseStream();
System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
long totalDownloadedByte = 0;
byte[] by = new byte[1024];
int osize = st.Read(by, 0, (int)by.Length);
while (osize > 0)
{
totalDownloadedByte = osize + totalDownloadedByte;
System.Windows.Forms.Application.DoEvents();
so.Write(by, 0, osize);
if (prog != null)
{
prog.Value = (int)totalDownloadedByte;
}
osize = st.Read(by, 0, (int)by.Length); percent = (float)totalDownloadedByte / (float)totalBytes * 100;
label1.Text = "当前补丁下载进度" + percent.ToString() + "%";
System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
}
so.Close();
st.Close();
}
catch (System.Exception)
{
throw;
}
}
}
}
1、客户端记录当前下载位置;
2、客户端停止下载,关闭流;
3、服务器端会出现异常,没关系,结束发送线程就是了。继续就是:
1、客户端请求发送文件,并给出起始位置;
2、服务器端读取文件,并从起始位置开始发送。 so.Seek(0, SeekOrigin.Begin);//设置当前流的位置 跳过已经下载的while (osize != (-1)&&isStop!=true) //isStop初始化为false,当我触发“暂停”按钮时执行isStop=true; 通过判断isStop的值来中断下载流。
有事耽搁了