欢迎光临
我们一直在努力

看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

 
记得以前刚用的时候,webclient确实看着挺简单,但是实现起来,小文件是一下就下载完了.

大文件要一直下载完毕才行.

后来找了找,用 webrequest 结合 webresponse 可以实现 有进度提示的,下载文件..
下面是代码..是从我一个软件中提取出来的.只取关键部分说明…
=====================================================================
     if(downloading==false) //如果无文件正在下载
     { 
      tempdown=currentfilename;
      if(currentfilename==""){tempdown=b;}
      whichdown=1;
      system.threading.thread apcthread2=new system.threading.thread(new system.threading.threadstart(downfile));
      apcthread2.start();
   
     }
     else
     {
      messagebox.show("对不起,当前正在下载文件.","提示",messageboxbuttons.ok,messageboxicon.information);
     }      
##################
大概说明下,如果当前没有文件正在下载,则启动一个新线程….下载文件.. 下面是 downfile函数的代码….
简单的地方就不做注释了.
=============================================================================
  //下载块#####################################################################################################
  private void downfile()
  {
   if(tempdown!="")
   {
   
    if(downloading==false) //如果无文件下载
    {
     long fb;
     this.apc_status_1.text="正在连接到 " + tempdown;
     downloading=true;
     try
     {
      //====尝试url有效性,以及初始化下载界面
      webrequest myre=webrequest.create(tempdown);
      webresponse mwrite=myre.getresponse();
      fb=mwrite.contentlength;
      this.apc_status_1.text="连接成功..开始下载..";
      pbar.value=0;
      pbar.maximum=(int)fb;
      pbar.visible=true;
      this.apclist.height=156;
      //====开始下载
      webclient wc=new webclient();
      savefiledialog sf=new savefiledialog();
      sf.title="请选择文件存放的位置";
      filename=currentfilename;
      sf.filename=filename.substring(filename.lastindexof("/")+1,filename.length-filename.lastindexof("/")-1);
      sf.showdialog(this);
      filename=sf.filename;
      if(filename!="")
      {
       stream srm=wc.openread(tempdown);
       streamreader srmer=new streamreader(srm);
       byte[] mbyte=new byte[fb];
       int allbyte=(int)mbyte.length;
       int startbyte=0;
       while(fb>0)  //################   循环读取文件,并显示进度…..
       {
        application.doevents();
        int m=srm.read(mbyte,startbyte,allbyte);
        if(m==0){break;}
        startbyte+=m;
        allbyte-=m;
        pbar.value+=m;
        int a1=(int)startbyte/1024;
        int a2=(int)fb/1024;
        this.apc_status_1.text="连接成功..开始下载.." + a1.tostring() + "/" + a2.tostring() + "kb";//startbyte + "/" + fb.tostring();
       }

       filestream fs = new filestream(filename,filemode.openorcreate);
       fs.write(mbyte,0,mbyte.length);
       fs.flush();

       srm.close();
       srmer.close();
       fs.close();

       this.apclist.height=170;
       pbar.visible=false;
       this.apc_status_1.text="文件下载完毕!";
      }                     

     }
     catch(webexception exp) //如地址无效或者找不到文件
     {
      messagebox.show(exp.message,"听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
     }
     downloading=false;
    }
    else
    {
     messagebox.show("对不起,当前正在下载文件.","听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
    }
   }
   else
   {
    if(whichdown==1)
    {
     messagebox.show("当前并无文件播放.","听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
    }
    else
    {
     messagebox.show("请在列表中选择好想要下载的文件.","听啪啪 提示",messageboxbuttons.ok,messageboxicon.information);
    }
   }
   
  }//下载块#####################################################################################################

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.-.NET教程,Asp.Net开发
分享到: 更多 (0)