Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
108 / 14 / 7
Регистрация: 06.07.2013
Сообщений: 268

Почему событие WebClient.DownloadProgressChanged() срабатывает не единожды на каждом тике загрузки

28.02.2018, 04:50. Показов 2628. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
WebClient обернут в мой класс, но мне нужно узнавать прогресс загрузки файлов из внешнего кода по этому решил сделать вот так:
Объявление внутри класса обертки:
C#
1
2
3
4
5
6
7
8
//...
public event AsyncCompletedEventHandler DownloadFileCompleted;
public event DownloadProgressChangedEventHandler DownloadProgressChanged;
//...
client = new WebClient();
client.DownloadProgressChanged += (s, e) => DownloadProgressChanged(s, e);
client.DownloadFileCompleted += (s, e) => DownloadFileCompleted(s, e);
//...
Обработчик уже в другом класса:
C#
1
2
3
4
5
6
            var updateChecker = new UpdateChecker(uri, appName);
 
            updateChecker.DownloadProgressChanged += (s, e) =>
                Console.WriteLine($"Загружено: {e.ProgressPercentage}%");
            updateChecker.DownloadFileCompleted += (s, e) =>
                Console.WriteLine("Загрузка закончена.");
В результате я получаю в консоли многократные сообщение о каждом проценте загрузки но при завершении только одно сообщение хотя реализованы они одинаково.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
Загружено: 98%
Загружено: 98%
Загружено: 98%
Загружено: 98%
Загружено: 98%
Загружено: 99%
Загружено: 99%
Загружено: 99%
Загружено: 99%
Загружено: 99%
Загружено: 100%
Загрузка закончена.
Загружено: 100%
Понятное дело что можно валидировать вывод но я хочу знать почему описанное выше происходит. Сам думаю что наверное событие срабатывает при загрузке каждого байта а не процента, но хз.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2018, 04:50
Ответы с готовыми решениями:

Не срабатывает событие по завершению скачивания: WebClient.DownloadStringCompleted
Вся проблема в том, что событие по завершению скачивания не срабатывает. Как не пытался, заставить работать не могу. Есть у кого...

Не срабатывает событие загрузки формы
Всем привет. Не выгружаются элементы на Form2 Public Class Form2 Public checkBoxMassive(10, 2) As CheckBox Private Sub...

Увеличить число в Label на единицу при каждом тике таймера
Привет Форумчани, ( как мне реализовать в лабел - сколько отправленно писем ?? Пример: И кусочек кода: буду очень рад если...

3
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
28.02.2018, 04:55
Потому что загрузка идет блоками по Х байт, и на каждый такой блок срабатывает событие. У DownloadProgressChangedEventArgs еще есть BytesReceived и TotalBytesToReceive, по которым ProgressPercentage и вычисляется...

Вот так вообще 1 строкой должно выводить прогресс...
C#
1
Console.Write($"\rЗагружено: {e.ProgressPercentage}%");
1
108 / 14 / 7
Регистрация: 06.07.2013
Сообщений: 268
28.02.2018, 05:29  [ТС]
У меня вроде бы и так одна строка. Просто читать длинные строки не удобно на маленьком мониторе, поэтому переношу.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
28.02.2018, 05:54
Цитата Сообщение от ATop Посмотреть сообщение
У меня вроде бы и так одна строка. Просто читать длинные строки не удобно на маленьком мониторе, поэтому переношу.
Я про вывод в консоли, а не про код... Если добавить \r и заменить WriteLine на Write, будет выводить одной строкой множество обновлений прогресса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2018, 05:54
Помогаю со студенческими работами здесь

Почему не срабатывает событие?
Подскажите почему не срабатывает событие? using System; using System.Collections.Generic; using System.ComponentModel; using...

Почему не срабатывает событие OnOrderAdd
AddEventHandler("sale","OnOrderAdd","fff"); function fff(&$ID, &$arFields) { $order_id=$ID; $user_id=$arField; ...

Почему событие onClick не срабатывает ?
В книге говорится что событие onClick срабатывает при нажатии на кнопке мыши. Но у меня ничего не выводит на экран при щелчке. Вот код: ...

Почему не срабатывает событие удаления записи?
Есть необходимость пересчета некоторых полей в форме ПОСЛЕ УДАЛЕНИЯ записи. Событие Удаление возникает фактически же ДО удаления? А событие...

Почему событие срабатывает несколько раз
почему в веббраузере за время загрузки страницы событие документкомплейт срабатывает несколько раз??? как сделать что бы срабатовалo один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru