记得以前刚用的时候,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);
}
}
}//下载块#####################################################################################################