怎么实现下载 实现下载 暂停 又开始下载

解决方案 »

  1.   

    暂停下载需要服务器的支持。一些http服务器支持分块传输,否则无法实现。原理是首先获得文件大小,在本地磁盘上建立同样大小的空白文件。然后分块从服务器中下载并填充它们,直到全部完成。
      

  2.   

    大侠 给点代码看看呗。。或者发到邮箱[email protected]
      

  3.   

    http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M
      

  4.   

    /// 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;
                }
            }
        }
    }
      

  5.   

    暂停? 下载放线程中  bool值控制 if(true) Sleep(1000)
      

  6.   

    +++暂停就是:
    1、客户端记录当前下载位置;
    2、客户端停止下载,关闭流;
    3、服务器端会出现异常,没关系,结束发送线程就是了。继续就是:
    1、客户端请求发送文件,并给出起始位置;
    2、服务器端读取文件,并从起始位置开始发送。  so.Seek(0, SeekOrigin.Begin);//设置当前流的位置 跳过已经下载的while (osize != (-1)&&isStop!=true) //isStop初始化为false,当我触发“暂停”按钮时执行isStop=true; 通过判断isStop的值来中断下载流。
      

  7.   

    昨天  yes16ws 大侠 告诉我的 我没弄出来 不知你说的sleep是不是这个意识。
     
      

  8.   

    sleep不行的,时间稍长就会被服务器踢掉了。
      

  9.   

    http://download.csdn.net/detail/yes16ws/4124161
    有事耽搁了
      

  10.   

     表示抱歉 忘给你分了 。。sorry
      

  11.   

    暂停不要想得那么复杂,只要给文件的对象添加一个属性,IsStop,然后在while读取文件时,判断IsStop是否为true,为true,就代表暂停了,你那个暂停的按钮可以控制这个IsStop的值,点击了暂停,就将这个对象的IsStop设置为false
      

  12.   

    there are many ways to deal with, you can select any one