Beispiel #1
0
 /// <summary>
 /// Процедура, для создания прогресс-баров
 /// </summary>
 /// <param name="mode">Режим. 1-создание и добавление, 2-удаление</param>
 /// <param name="httpObject">Объект HTTP</param>
 public void Watcher(int mode, HttpObject httpObject)
 {
     this.BeginInvoke((MethodInvoker)delegate
        {
        /*Добавление прогресс бара для данного HTTP-объекта*/
        if (mode == 1)
        {
            //Создаю новый груп-бокс
            GroupBox gb = new GroupBox();
            //Выставляю ему размер чуть меньше, чем контейнер
            gb.Size = new Size(flowLayoutPanel1.Width - 5, 25);
            //Выделяем память и инициализируем место для прогресс-бара
            httpObject.progressBar = new ProgressBar();
            //Задаем имя прогресс бара (имя - уникальный идентификатор GUID, который не повторяется)
            httpObject.progressBar.Name = httpObject.guid.ToString();
            //Задаем минимум и максимум для прогресс бара
            /*Так как выполнение отображается в процентах, диапазон от 0 до 100*/
            httpObject.progressBar.Minimum = 0; httpObject.progressBar.Maximum = 100;
            //Добавляем данный прогресс бар внутрь групбокса
            gb.Controls.Add(httpObject.progressBar);
            //Выставляем режим "Заполнять все пространство" для прогресс-бара
            httpObject.progressBar.Dock = DockStyle.Fill;
            //Выставляем текст груп-бокса имя скачиваемого файла
            gb.Text = httpObject.Name;
            //Добавляем данную конструкцию в контейнер
            flowLayoutPanel1.Controls.Add(gb);
        }
        /*Удаление прогресс бара для данного HTTP-объекта*/
        if (mode == 2)
        {
            //Создаем ссылку на прогресс-бар с указанным именем
            ProgressBar pb = (ProgressBar)flowLayoutPanel1.Controls.Find(httpObject.guid.ToString(), true)[0];
            //Удаляем родительский груп-бокс из контейнера (удаляется вместе с прогресс-баром)
            pb.Parent.Dispose();
            //Удаляем данный HTTP - элемент из данной коллекции
            httpLinks.Remove(httpObject);
        }
        });
 }
Beispiel #2
0
 /// <summary>
 /// Обработчик события "Изменен статус загрузки файла"
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 /// <param name="httpObject"></param>
 void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e, HttpObject httpObject)
 {
     this.BeginInvoke((MethodInvoker)delegate
     {
         //Вычисляем процент загрузки файла
         double bytesIn = double.Parse(e.BytesReceived.ToString());
         double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
         double percentage = bytesIn / totalBytes * 100;
         //Проставляем процент для прогресс-бара
         httpObject.progressBar.Value = (int)Math.Truncate(percentage);
     });
 }
Beispiel #3
0
 /// <summary>
 /// Асинхронная загрузка файла
 /// </summary>
 /// <param name="link"></param>
 private void DownloadHttpFile(HttpObject link)
 {
     //Создаем новый экземпляр клиента, чтобы потоки не ругались друг на друга
     client = new WebClient();
     //Добавляем для данного клиента обработчики собыытий "Изменен статус загрузки файла" и "Загрузка файла окончена"
     client.DownloadProgressChanged += (sender, e) => client_DownloadProgressChanged(sender, e, link);
     client.DownloadFileCompleted += (sender,e) => client_DownloadFileCompleted(sender,e,link);
     //Запускаем загрузку в асинхронном режиме
     client.DownloadFileAsync(link.Url, Path.Combine(link.pathToSave, link.Name));
 }
Beispiel #4
0
 /// <summary>
 /// Обработчик события "Загрузка файла окончена"
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 /// <param name="link"></param>
 void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e,HttpObject link)
 {
     this.BeginInvoke((MethodInvoker)delegate
     {
         //Удаляем прогресс бар, отвечающий за данный файл
         Watcher(2, link);
     });
 }