Событие И делегаты в Классе

 
0
 
.NET
ava
Samvel2010 | 24.01.2013, 12:53
Добрый день .. Пытаюсь сделать загручик файлов  необходимы датчики скорости ,сколько загруженно ,весь размер ..
Я сам новичёк но не могу понять Как  это сделать

Использую Этот класс


using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;
using System.Windows.Forms;

namespace Dwn123
{
    class Downloader
    {
        public DateTime DwNLoadChange;
        private const int chunkSize = 1024;
        private bool doDownload = true;
        public bool AcceptRanges = false;
        private string url;
        private string filename;
        private Thread downloadThread;

        public long FileSize
        {
            get;
            private set;
        }
        public long Progress
        {
            get;
            private set;
        }
        
        public Downloader(string Url, string Filename)
        {
            this.url = Url;
            this.filename = Filename;
            this.CheckAcceptRanges();
        }

        public void StartDownload()
        {
            Progress = 0;
            FileSize = 0;
            commenceDownload();
        }

        public void PauseDownload()
        {
            doDownload = false;
            downloadThread.Join();
        }

        public void ResumeDownload()
        {
            doDownload = true;
            commenceDownload();
        }

        private void commenceDownload()
        {
            downloadThread = new Thread(downloadWorker);
            downloadThread.Start();
        }

        public void CheckAcceptRanges()
        {
            HttpWebRequest request = WebRequest.Create(this.url) as HttpWebRequest;
            request.Method = "HEAD";
            var response = request.GetResponse() as HttpWebResponse;
            foreach (string sKey in response.Headers.Keys)
            {
                if (sKey.ToString() == "Accept-Ranges")
                {
                    this.AcceptRanges = true;
                    break;
                }
                else
                {
                    this.AcceptRanges = false;
                }
            }
        }

        public void downloadWorker()
        {
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            FileMode filemode;
            
            if (Progress == 0) //Если сущетвет процесс "закачки"
            {
                filemode = FileMode.CreateNew;
            }
            else
            {
                filemode = FileMode.Append;
                myHttpWebRequest.AddRange((int)Progress);
            }
         
            using (FileStream fs = new FileStream(filename, filemode))

            using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
            {
                Stream receiveStream = myHttpWebResponse.GetResponseStream();
                FileSize = myHttpWebResponse.ContentLength;

                byte[] read = new byte[chunkSize];
                int count;


                while ((count = receiveStream.Read(read, 0, chunkSize)) > 0 && doDownload)
                {
                    fs.Write(read, 0, count);
                    count = receiveStream.Read(read, 0, chunkSize);

                    Progress += count;
                }
            }
        }
    }
}

Ответы (1)
ava
Certain | 24.01.2013, 17:01 #
Лучше использовать класс System.Net.WebClient

Используйте асинхронный метод DownloadFileAsync

для отслеживания процесса подпишитесь на события
DownloadProgressChanged  - процесс загрузки (процент выполнения, общее количество байтов, количество полученных байтов)
DownloadFileCompleted   - окончание загрузки



Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить