2013-09-09 4 views
2

На данный момент у меня есть система очередей, в которой размещаются все ссылки для загрузки файлов, и она загружает их по одному.2 Progress Bars для загрузки нескольких файлов

То, что я пытался сделать, это не 1, а 2 бара прогресса. Верхний индикатор выполнения будет для прогресса текущего файла, а следующий ниже будет для общего прогресса, прежде чем все файлы будут загружены.

Я попытался придумать, как это сделать, но я не могу понять, как я буду заниматься этим.

То, что я попытался это:

If Me.fileUrls.Count = 1 Then 
    CProgressBarTotal.Value = Help.ProgPercent.Text 
Else 
    CProgressBarTotal.Value = Help.ProgPercent.Text/Me.fileUrls.Count 
End If 

И я понял, после того, что это не будет работать. Я также пытался подумать о других способах этого, но я ничего не мог придумать.

Кто-нибудь знает, как я смогу это сделать? Благодарю.

+0

Что цель «общего прогресса» бар? Чтобы показать прогресс в процентах от загруженных файлов (в этом случае ваш алгоритм близок) или показать процент от общего количества загруженных байтов (в этом случае вам нужно суммировать размер всех файлов, отслеживать все байты загрузить и использовать итоговые значения в качестве вашего соотношения). – PaulProgrammer

+0

В любом случае это произойдет, но это будет звучать так, как если бы процент от общего количества загруженных байтов был бы лучше. Что ты предлагаешь? Первоначально планировалось показать процент загружаемых файлов, но мне больше нравится процент от общего количества байтов. –

+0

если вы хотите, чтобы они прогрессировали одновременно, разве вы не должны смотреть на многопоточность? – Manny265

ответ

0

Вам не нужно, если заявление:

CProgressBarTotal.Value = (currentFileNumber/Me.fileUrls.Count + Help.ProgPercent.Text/100/Me.fileUrls.Count) * CProgressBarTotal.Maximum 
+0

Кажется, не работает так, как я этого хочу. –

0

Чтобы иметь второй индикатор, который отслеживает общий размер загруженным:

  1. До показа экрана загрузки, определить общее количество байт для загрузки. Специфика здесь зависит от механизма загрузки, но большинство FTP и HTTP-серверов будут предоставлять размеры файлов. В тех случаях, когда они этого не делают, вам придется сделать разумную оценку. Сохраните это в доступной переменной-члене.

  2. Создать доступную переменную-член для общего количества загруженных байтов. Привяжите это к той же подпрограмме, которая обновляет ход одного файла, так что каждая загрузка «tick» также накапливает поле «количество загруженных байтов» в дополнение к проценту текущего файла, как и сейчас.

  3. Привязывает общее количество байтов к максимальному значению хода «общего процента». Свяжите байт, загруженный счетчиком, с положением индикатора выполнения.

Для получения дополнительных баллов: Настройка привязок динамическим способом, таким образом, что если файл будет добавлен (или удален из него) очередь загрузки, общее количество байт для загрузки счетчика обновляется в режиме реального времени и индикатор выполнения сбрасывает соответствующий прогресс.

+0

Nah Я бы предпочел придерживаться того, что я делал раньше, я думаю, что это будет работать более эффективно. Знаете ли вы, что я раньше делал? –

+0

Используйте только «else» часть вашего предложения. – PaulProgrammer

+0

Нет, это не сработает. Потому что он не будет складывать их все, после того, как верхний индикатор выполнения сбрасывается, так и нижний. –