Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Cdvig
9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173

Запуск архивов по очереди

03.06.2010, 07:21. Показов 1536. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте бьюсь над следующей проблемой на форме есть progressBar1 который должен менять свое значение после распаковки каждого архива.



Код
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
private void button1_Click(object sender, EventArgs e)
        {
            int value = 0;//значение progressBar1
            string TempPath = @"D:\Temp\";
            string temp01Path = @"D:\Temp\temp01\";            
            string Arh1 = @"Data\Arh1.7z";
            string Arh2 = @"Data\Arh2.7z";
            string ZPath = @"Data\7z.exe";
            int Delitel = 2;//делитель по числу архивов
           
            //Стандарт фвижка для всех
            Process szArh1 = null;
            try
            {
                //параметры запуска процесса
                szArh1 = new Process();
                szArh1.StartInfo.FileName = ZPath;
                szArh1.StartInfo.Arguments = " x " + Arh1 + " -o" + temp01Path + " -y"; 
 
                // Старт
                szArh1.Start();
 
                // Ждем пока процесс не завершится
                szArh1.WaitForExit();
            }
            finally
            {
                if (szArh1 != null)
                {
                       szArh1.Close();
                }
                value = value + 100 / Delitel;
                progressBar1.Value = value;
            }
 
            Process szArh2 = null;
            
 
            try
            {
                // Устанавливаем параметры запуска процесса
                szArh2 = new Process();
                szArh2.StartInfo.FileName = ZPath;
                szArh2.StartInfo.Arguments = " x " + Arh2 + " -o" + TempPath + " -y";
 
                // Старт
                szArh2.Start();
 
                // Ждем пока процесс не завершится
                szArh2.WaitForExit();
            }
            finally
            {
                if (szArh2 != null) szArh2.Close();
                value = value + 100 / Delitel;
                progressBar1.Value = value;
            }
        }
в этом коде есть ряд проблем которые меня не удовлетворяют
1)после завершения первой распаковки сразу стартует вторая, а progressBar1 не меняет своего значения
2)во время распаковки архива формой нельзя управлять то есть перетаскивать, сворачивать, разворачивать и тп(возможно это и есть решение первого пункта дать форме "свободу" во время выполнения процесса)

архиватор следующий 7z.exe консольное приложение которое устанавливается вместе с архиватором.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.06.2010, 07:21
Ответы с готовыми решениями:

Запуск потока вне очереди
Имею private void button1_Click(object sender, EventArgs e) { Thread cn = new Thread(func); ...

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

Написать программу содержащий описание очереди и моделирует работу очереди
Написать программу (функцию main), содержащий описание очереди и моделирует работу очереди. Размер очереди 100; Заполнить очередь...

8
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
03.06.2010, 07:53
Цитата Сообщение от Cdvig Посмотреть сообщение
во время распаковки архива формой нельзя управлять
конечно, потому что используется
Цитата Сообщение от Cdvig Посмотреть сообщение
WaitForExit()
поток программы останавливается до завершения вызванного процесса
Необходимо распаковку делать в дополнительном фоновом потоке, но тогда возникнут небольшие осложнения с отображением в progressBar.
0
 Аватар для Cdvig
9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173
03.06.2010, 08:09  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
конечно, потому что используется

поток программы останавливается до завершения вызванного процесса
Необходимо распаковку делать в дополнительном фоновом потоке, но тогда возникнут небольшие осложнения с отображением в progressBar.
например я даже не представляю как это реализовать.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
03.06.2010, 08:42
класс Thread работает с потоками (описание в MSDN)


Цитата Сообщение от Cdvig Посмотреть сообщение
я даже не представляю как это реализовать
если отказаться от ипользования progressBar и убрать WaitForExit(), то будет и так работать
0
 Аватар для Cdvig
9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173
03.06.2010, 08:42  [ТС]
или возможно ли дождаться завершения процесса без WaitForExit например с помощью
C#
1
2
Arh1.EnableRaisingEvents = true
                Arh1.Exited +=new EventHandler(Arh1_Exited);
и далее
C#
1
2
3
4
private void Arh1_Exited(object sender, EventArgs e)
        {
            //чтото происходит после завершения процесса
        }
как то так но все равно не то может как то модифицировать этот код например булеаном или еше каким то событием например положить запуск второго процесса в цикл while и проверяя на истиность какого нибудь public bool а в событии Arh1_Exited задается значение этого булеана.
Или как то так может у кого есть лучше идея
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
03.06.2010, 08:50
Если нужно контролировать выполнение процесса и работать со своим приложением, единственный выход многопоточность.
0
 Аватар для Cdvig
9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173
03.06.2010, 14:07  [ТС]
А если сделать паузу перед запуском чтобы форма успела получить данные что архив распаковался
возможно ли такое?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
03.06.2010, 14:38
статический метод
C#
1
Thread.Sleep(<время>)
блокирует текущий поток на указанное количество мс. Но если произойдет сбой распаковки, что будешь делать ?.. Освой создание потоков, тема небольшая, но очень полезная
1
 Аватар для Cdvig
9 / 9 / 4
Регистрация: 08.10.2009
Сообщений: 173
03.06.2010, 16:53  [ТС]
Спасибо буду осваивать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2010, 16:53
Помогаю со студенческими работами здесь

Запуск jar архивов
Всем привет ситуация такая: У меня есть Jar архив с примерно таким классом: class MyClass extends JFrame { } и если...

Запуск музики по очереди...
Я знаю что с помощю &lt;bgsound src='../FrameSite/Matron2.wav' loop='-1'&gt; , можно засунуть музыку на сайт, но как зделать чтобы музыка...

Запуск функций по очереди
Здравствуйте, подскажите пожалуйста При нажатии на кнопку должен запуститься 1 таймер, дождаться окончания, далее сообщения о окончания...

Запуск макросов по очереди - по щелчку кнопки
Добрый вечер. Возник вопрос по макросу. Нашел макрос, в котором в два столбца записаны названия макросов, которые выполняются по...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru