Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
1

Показать прогресс скачивания и установки

04.04.2016, 11:41. Показов 2210. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
(Начало обсуждения)

Хочу реализовать ПрогрессБар либо в той же форме с чекбоксами либо в отдельной которая открывается при нажатии на кнопку "инстал"
должна отображать (если в тойже форме) скачивание файла и установку (хотябы скачивание) .
(Если в отдельной форме) то прогресс скачивания "данного" файла и общий прогресс,
Если можно, то просьба не приписывать код как он должен быть, а как нибудь в виде примера или чтото типа этого, хотелось бы самому додумать. А то получается ты мне пол кода уже написал, конечно я очень благодарен, но так эфект обучение меркнет

ПыСы. гугл и msn я уже спрашивал, но там только примеры нашел с таймером прогрессбар стартует когда таймер запускается
или если чтото нашел на скачь то не совсем понял как мне это в свой код приписать, темболее как мне передать инфу в новую форму
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2016, 11:41
Ответы с готовыми решениями:

Прогресс бар для скачивания видео
Привет всем! Написал программу. Она скачивает видео по ссылке на него, все работает, но если видео...

ProgressBar - отобразить прогресс скачивания файла
Народ обясните пожалуста как он работает.Тоесть вот мне надо скачать файл (например архив какойто...

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

Прогресс бар для отображения процесса скачивания файла
Сделал апдейтер для своей игры(Использовал game maker). Но иногда патчи бывают очень большие. А он...

9
Администратор
Эксперт .NET
17552 / 13775 / 5298
Регистрация: 17.03.2014
Сообщений: 28,253
Записей в блоге: 1
04.04.2016, 12:40 2
Лучший ответ Сообщение было отмечено Steroid как решение

Решение

Steroid, для прогресса можно использовать события класса WebClient. Насчет передачи данных между формами читай ответ на вопрос №2 в теме Ответы на 7 самых частых вопросов по WinForms, а также тему Архитектура ПО в WinForms (FAQ & HowTo)
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
05.04.2016, 00:22  [ТС] 3
Спасибо
дома почитаю, а то многа букав (на работе некогда)

Добавлено через 9 часов 22 минуты
OwenGlendower, я кажется понял
мой код изначально был не совсем правильно построен
а точнее я делал форму и пытался из ходя из нее выводить всякие разные фукции
а надо было написать код и потом из него строить хоть десять форм (если своими словами) правильно?
0
Администратор
Эксперт .NET
17552 / 13775 / 5298
Регистрация: 17.03.2014
Сообщений: 28,253
Записей в блоге: 1
05.04.2016, 00:29 4
Steroid, в общем да.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
09.04.2016, 20:34  [ТС] 5
код переделал, теперь у меня на контролах ничего не висит
форма с чекбоксами с читывает все из chbxClass.cs

Форма с чекбоксами:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void InstallButton_Click(object sender, EventArgs e)
        {
            try
            {
if (checkBox1.Checked)
                {
                    chbxClass.Google();
                }
if (checkBox2.Checked)
                {
                    chbxClass.Mozilla();
                }


Класс chbxClass.cs:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void Google()
        {
            ProcessStartInfo go = new ProcessStartInfo();
            WebClient google = new WebClient();
            google.DownloadFile("https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe", @"C:\\Data\\ChromeSetup.exe");
            while (File.Exists(@"C:\\Data\\ChromeSetup.exe"))
            {
                Thread.Sleep(50);
            }
            go.Arguments = "/S";
            Process.Start(go).WaitForExit();
        }
        public static void Mozilla()
        {
            ProcessStartInfo mo = new ProcessStartInfo();
            WebClient mozilla = new WebClient();
            mozilla.DownloadFile("https://download-installer.cdn.mozilla.net/pub/firefox/releases/42.0/win32/de/Firefox%20Setup%20Stub%2042.0.exe", @"C:\\Data\\Mozilla.exe");
            while (File.Exists(@"C:\\Data\\Mozilla.exe"))
            {
                Thread.Sleep(50);
            }
            mo.Arguments = "/S";
            Process.Start(mo).WaitForExit();
        }


пытался както вставить ProgressBar но так и не получилось, много гайдов смотрел, но как их применить здесь так и не понял.

нужно чтоб отображалось с каждому чекбоксу свое и в отдельном прогресбаре общее
Изображения
 
0
Эксперт .NET
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
09.04.2016, 21:05 6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            string file = @"C:\\Data\\ChromeSetup.exe";
            WebClient google = new WebClient();
            google.DownloadProgressChanged += (s, a) => progressBar1.Value = a.ProgressPercentage;
            google.DownloadFileAsync(new Uri("https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe"), file);
            google.DownloadFileCompleted += (s, a) => {
                if (a.Error != null)
                    MessageBox.Show(a.Error.ToString());
                else
                {
                    ProcessStartInfo go = new ProcessStartInfo();
                    go.FileName = file;
                    go.Arguments = "/S";
 
                    Process.Start(go).WaitForExit();
                }
            };
Соответственно на форме должен быть прогрессбар с именем progressBar1.
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
09.04.2016, 21:42  [ТС] 7
Someone007,

если я это припишу в классе а не в форме, как мне заставить прогрессбар на форме двигаться?
чтото типа menuForm.ProgressBar1.Value ? как это сделать можно ума не приложу

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string file = @"C:\\Data\\ChromeSetup.exe";
            WebClient google = new WebClient();
            google.DownloadProgressChanged += (s, a) => /* можно же сюда вписать както или???*/  progressBar1.Value = a.ProgressPercentage;
            google.DownloadFileAsync(new Uri("https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe"), file);
            google.DownloadFileCompleted += (s, a) => {
                if (a.Error != null)
                    MessageBox.Show(a.Error.ToString());
                else
                {
                    ProcessStartInfo go = new ProcessStartInfo();
                    go.FileName = file;
                    go.Arguments = "/S";
 
                    Process.Start(go).WaitForExit();
                }


незнаю понятно ли объяснил
0
Эксперт .NET
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
10.04.2016, 00:21 8
Лучший ответ Сообщение было отмечено Steroid как решение

Решение

C#
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
    class BrowserInstaller
    {
        public delegate void ProgressUpdate(int pct);
 
        public event ProgressUpdate OnProgress;
 
        public void InstallChrome()
        {
            string file = @"C:\\Data\\ChromeSetup.exe";
            WebClient google = new WebClient();
            google.DownloadProgressChanged += (s, a) => OnProgress?.Invoke(a.ProgressPercentage);
            google.DownloadFileAsync(new Uri("https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7BA01E3D89-12EB-73E8-42E4-35DB1881DC3F%7D%26lang%3Dde%26browser%3D4%26usagestats%3D0%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe"), file);
            google.DownloadFileCompleted += (s, a) => {
                if (a.Error != null)
                    MessageBox.Show(a.Error.ToString());
                else
                {
                    ProcessStartInfo go = new ProcessStartInfo();
                    go.FileName = file;
                    go.Arguments = "/S";
 
                    Process.Start(go).WaitForExit();
                }
            };
        }
    }
Где-то в классе формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Form1
{
    BrowserInstaller installer = new BrowserInstaller();
 
    void Form1_Load(object s, EventArgs e)
    {
        installer.OnProgress += (p) => progressBar1.Value = p;
    }
 
    private void InstallButton_Click(object sender, EventArgs e)
    {
        if (checkBox1.Checked)
        {
            installer.InstallChrome();
        }
        if (checkBox2.Checked)
        {
            installer.InstallMozilla();
        }
    }
}
1
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
10.04.2016, 13:28  [ТС] 9
Someone007,
спасибо
это продвинуло меня дальше

Добавлено через 9 часов 11 минут
а как прописать несколько процессов скачивания в один прогрессбар?

и еще вопрос:
как правильно прописать копирование файла из одной точки в другую (в прогресбаре я имею в виду)
0
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
11.04.2016, 22:03  [ТС] 10
Пуш
0
11.04.2016, 22:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 22:03
Помогаю со студенческими работами здесь

После распаковки файлов и установки обновлении на пункте "Завершение установки" прогресс останавливается
Устанавливаю с флешки, BIOS, не UEFI. Оперативной памяти 4 Гб, пытался ставить 64-разрядные...

Как показать прогресс действия?
Здравствуйте! Пишу приложение, в котором нужно указать происходящий прогресс. Проект переделываю...

Как показать прогресс выполнения серверного процесса
в ексель есть код на вба,который запускает программу на перл,нужно показать в вба ход...

Показать прогресс работы программы вместо ее зависания
Подскажите как решить проблемму. У меня в программе при нажатии на кнопку идёт подключение к...

Как показать пользователю скорость скачивания файла
Доброго времени суток,уважаемые форумчане. Подскажите,как показать пользователю скорость...

После скачивания и установки игры, все файлы на компьютере зашифровались
Помогите, пожалуйста!После скачивания и установки игры, все файлы на компьютере зашифровались,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru