Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406

ProgressBar и окно засыпают

22.11.2017, 14:35. Показов 1571. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

У меня на форме есть progressBar. Сама программа выполняет тяжелые действия-загрузка данных из файлов в бд. По времени долго выполняется, поэтому, чтобы пользователь видел, что процесс не стоит на месте.
И вот проблема:
1)Когда запускаю файл exe из папки Debug, то полоса на чуть-чуть продвигается, потом курсор меняется на песочные часы, полоса замирает. Притом на самом деле программа работает. Через определенное время, полоса резко в конец-все дейсвия выполнились.
2) А если запускать через саму VS 2015 командой F5, то полоса продвигается.
В чем дело?

Я пыталась и закомментироанным кодом и без. Результат один и тот же

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
 private void simpleButton1_Click(object sender, EventArgs e)
        {
 DirectoryInfo dir = new DirectoryInfo(@"\\здесь некий путь к файлам");
  int fileCount = Directory.GetFiles(@"\\здесь некий путь к файлам", "*.xlsx", SearchOption.AllDirectories).Length;
 
 progressBar1.Maximum = fileCount;  
            progressBar1.Value = 0;     
 
 foreach (var item in dir.GetDirectories()) //Список каталогов
            {
                DirectoryInfo items = new DirectoryInfo(dir.ToString() + @"\" + item.ToString());
 
                foreach (var data in Directory.GetFiles(items.ToString(), "*.xlsx"))  //Список файлов
                {
 
                  // Thread t = new Thread(new ThreadStart(delegate
                   // {
 
 
                     //   this.Invoke(new ThreadStart(delegate
                     //   {   
 
 
                     Всякие действия 
 
  progressBar1.Value++;
 
                     //   }));
 
                   // }));
                   // t.Start();
                  
                }
 
            }
 
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2017, 14:35
Ответы с готовыми решениями:

Модальное окно с ProgressBar
Как на C# реализуется модальное окно с progressBar и кнопкой "Отмена"? За любую информацию благодарна.

Progressbar пока грузится окно
Форумчане не подскажете как реализовать чтобы при открытии формы сначала progressbar ПОКАЗЫВАЛ ЗАГРУЗКУ? заранее благодарен

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

5
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
22.11.2017, 14:46
Лучший ответ Сообщение было отмечено Aumi как решение

Решение

Aumi,
1) Хорошо бы понять, что делает Control.Invoke() метод;
2) Хорошо бы почитать про таски и асинхронные обработчики.

Вот вам кусок кода (нагло взятый из просторов интернета), разбирайтесь (.NET 4.5):
C#
1
2
3
4
5
6
7
8
9
private async void button1_Click(object sender, EventArgs e)
{
    IProgress<int> progress = new Progress<int>(value => { progressBar1.Value = value; });
    await Task.Run(() =>
    {
        for (int i = 0; i <= 100; i++)
            progress.Report(i);
    });
}
1
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406
22.11.2017, 17:26  [ТС]
Cupko, Все очень хорошо шло. Но процесс пошел по второму кругу, и третьему и так далее. Возможно, есть какая нибудь команда стоп? я не нашла пока что.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private async void button1_Click(object sender, EventArgs e)
{
    IProgress<int> progress = new Progress<int>(value => { progressBar1.Value = value; });
    await Task.Run(() =>
    {
               int fileCount = Directory.GetFiles(@"\путь\", "*.xlsx", SearchOption.AllDirectories).Length;
        for (int i = 0; i <= fileCount; i++)
               {
                    GoExcel(); //это вся каша с обработкой данных
                    progress.Report(i);
                }   
 });
}
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
23.11.2017, 10:37
ну а откуда прогресу знать, сколько там у Вас файлов.
Если файлов больше 100 - то и пойдет по следующем кругу, ведь макс шкала прогресбара = 100.
Поставьте какой-то коефициент на количество файлов.
0
 Аватар для Aumi
20 / 36 / 14
Регистрация: 08.10.2015
Сообщений: 406
23.11.2017, 11:22  [ТС]
hoolygan, это значит что типо так?
C#
1
2
 int step = 100 / fileCount;
progress.Report(i*step);
Добавлено через 7 минут
И в цикле вернуть 100
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
23.11.2017, 20:43
Нет, цикл пусть лстанется, но вот метод его обновления вызывать раз в несколько итераций, в зависимости от коефициента.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2017, 20:43
Помогаю со студенческими работами здесь

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

Создать окно произвольного размера, скрыть окно, показать окно, удалить окно.
Создать окно произвольного размера, скрыть окно, показать окно, удалить окно. Для создания окна необходимо произвести следующие...

Консольный progressbar или progressbar в TMemo
Здравствуйте. Хочу спросить ради интереса как создать вот такой ProgressBar но с указанием своих сиволов в консоли и в...

"засыпают" динамики
Выручайте срочно! Купил ноутбук на Windows 10, заметил, что если после секунд 10 тишины что-нибудь воспроизвести, воспроизведение...

Как перейти на второе окно, что бы первое окно закрылось (NetBeans)
Здравствуйте. Работаю с NetBeans. Например: запускаю программу, открывается окно, нажимаю кнопку на этом окне: запускается новое окно,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru