首页 > 开发 > 综合 > 正文

c#使用线程下载文件的控制技巧和缺陷

2024-07-21 02:26:00
字体:
来源:转载
供稿:网友

//c#使用线程下载文件的控制技巧和缺陷

//系统引用//定义线程公共变量//开始线程下载文件//中止线程下载

//系统引用

using system;
using system.drawing;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.net;
using system.io;
using system.text;
using system.threading;
using system.data;

//定义线程公共变量
  public system.threading.thread thread001;
  public system.threading.thread thread002;

   //开始线程下载文件

private void button7_click(object sender, system.eventargs e)
  {
   //开始线程下载文件
   downloadclass a=new downloadclass(); 
   thread001= new thread(new threadstart(a.downloadfile));
   a.strurl=textbox1.text;
   a.strfilename=textbox2.text;   
   thread001.start();
   downloadclass b=new downloadclass(); 
   thread002= new thread(new threadstart(b.downloadfile));
   b.strurl=textbox3.text;
   b.strfilename=textbox4.text;   
   thread002.start();
  }

   //中止线程下载

private void button5_click(object sender, system.eventargs e)
  {
   //中止线程下载
   thread001.abort();  
   thread002.abort();
   messagebox.show("线程已经中止!","警告!");
   
  }

 

//定义下载文件类.线程传参数用

  public class downloadclass
  {  
   //打开上次下载的文件或新建文件
   public string strurl;//文件下载网址
   public string strfilename;//下载文件保存地址
   public string strerror;//返回结果
   public long lstartpos =0; //返回上次下载字节
   public long lcurrentpos=0;//返回当前下载字节
   public long ldownloadfile;//返回当前下载文件长度

   public void downloadfile()
    {    
    system.io.filestream fs;
    if (system.io.file.exists(strfilename))
    {
     fs= system.io.file.openwrite(strfilename);
     lstartpos=fs.length;
     fs.seek(lstartpos,system.io.seekorigin.current);
     //移动文件流中的当前指针
    }
    else
    {
     fs = new system.io.filestream(strfilename,system.io.filemode.create);
     lstartpos =0;
    }

    //打开网络连接
    try
    {
     system.net.httpwebrequest request =(system.net.httpwebrequest)system.net.httpwebrequest.create(strurl);
     long length=request.getresponse().contentlength;
     ldownloadfile=length;
     if (lstartpos>0)
      request.addrange((int)lstartpos); //设置range值
    
     //向服务器请求,获得服务器回应数据流
     system.io.stream ns= request.getresponse().getresponsestream();
    
     byte[] nbytes = new byte[512];
     int nreadsize=0;    
     nreadsize=ns.read(nbytes,0,512);
     while( nreadsize >0)
     {
      fs.write(nbytes,0,nreadsize);
      nreadsize=ns.read(nbytes,0,512);
      lcurrentpos=fs.length; 
   
     }
    
     fs.close();
     ns.close();
     strerror="下载完成";
    
    }
    catch(exception ex)
    {
     fs.close();
     strerror="下载过程中出现错误:"+ ex.tostring();
    
    }
  
   }
  } 
  //定义下载类结束 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表