DownloadThread.cs 2.0 KB
Newer Older
林新发's avatar
林新发 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
using System;
using System.IO;
using System.Net;


namespace winform1
{
    class DownloadThread
    {
        /// <summary>
        /// 线程开始事件
        /// </summary>
        public event EventHandler threadStartEvent;
        /// <summary>
        /// 线程执行时事件
        /// </summary>
        public event EventHandler threadEvent;
        /// <summary>
        /// 线程结束事件
        /// </summary>
        public event EventHandler threadEndEvent;

        /// <summary>        
        /// c#,.net 下载文件        
        /// </summary>        
        /// <param name="url">下载文件地址</param>       
        /// <param name="filename">下载后的存放地址</param>     
        public void RunMethod(string url, string filename)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //通知主界面,我开始了, response.ContentLength用来设置进度条的最大值
                threadStartEvent.Invoke(response.ContentLength, null);

                Stream st = response.GetResponseStream();
                Stream so = new FileStream(filename, FileMode.Create);
                long totalDownloadedByte = 0;
                byte[] by = new byte[1024];
                int osize = st.Read(by, 0, by.Length);
                while (osize > 0)
                {
                    totalDownloadedByte += osize;
                    so.Write(by, 0, osize);
                    osize = st.Read(by, 0, by.Length);

                    //通知主界面我正在执行,totalDownloadedByte表示进度条当前进度
                    threadEvent.Invoke(totalDownloadedByte, null);
                }
                so.Close();
                st.Close();

                //通知主界面我已经完成了
                threadEndEvent.Invoke(null, null);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}