C#用线程传参下载文件的代码

来源:网络整理 责任编辑:栏目编辑 发表时间:2013-07-01 19:30 点击:

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;

private void button6_Click(object sender, System.EventArgs e)
  {
   //定义一个类
   //实例化一个线程对象
   //实例类对象赋值
   DownloadClass a=new DownloadClass();
   Thread thread2 = new Thread(new ThreadStart(a.DownloadFile));
   a.StrUrl=textBox1.Text;
   a.StrFileName=textBox2.Text;
   thread2.Start();
   if(thread2.Join(500))
    {
    MessageBox.Show(a.strError);
    }  
  
  }

 
  //测试用线程1断点续传下载网络上的文件到本地电脑
  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();
   
    }
 
   }
  } 
  //定义下载类结束

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 用C#制作屏幕捕获程序
    • .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上
    • 遍历ArrayList易犯错误
    • C#对XML操作:一个处理XML文件的类(1)
    • .NET简谈反射(动态调用)
    • 使用C#编写LED样式时钟控件
    • DataList嵌套问题 如何删除内层子DataList的记录
    • 怎样用C#实现完整文档打印功能
    • .NET简谈自定义事务资源管理器
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1