Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
7 / 4 / 3
Регистрация: 01.11.2015
Сообщений: 264
1

Не заполняется prgoressbar в цикле

18.08.2022, 14:31. Показов 550. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Попробовал так, но почему то он не заполняется никак
C#
1
2
3
4
5
 for (int i = 0; i < progressBar1.Maximum; i++)
            {
                label1.Text = i.ToString();
                progressBar1.Value += 10;
            }
Добавлено через 9 минут
Пытался через отладку посмотреть, но понял что программа даже не доходит до переменной внутри цикла, попытался через поток реализовать идею, не получилось
C#
1
2
3
4
5
6
7
8
9
10
Thread t = new Thread(new ThreadStart(delegate {
                for (int i = 0; i ==progressBar1.Maximum; i++)
                {
                    this.Invoke(new ThreadStart(delegate
                    {
                        label1.Text = i.ToString();
                        progressBar1.Value += i;
                    }));
                }
            }));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2022, 14:31
Ответы с готовыми решениями:

не заполняется массив в цикле
$stc = 'http://site.ru'; $refy = '/aababab/page/2/tab/ab'; do { $mass = $stc.$refy; // запись в...

Неверно заполняется массив в цикле
написал такое: $ps_list=&quot;assistby&quot;; $ps_list=&quot;ipay&quot;; ...

В цикле не заполняется строка матрицы
Здравствуйте. Есть код, в котором представлены матрицы s и elem. В матрице elem содержатся данные о...

Не заполняется ComboBox данными столбцы DGV в цикле
Прошу помочь. Запутался совсем. Ниже представлен код: 2 цикла подряд For ... Next (заполнение двух...

3
2327 / 1816 / 751
Регистрация: 27.07.2012
Сообщений: 5,359
18.08.2022, 23:47 2
Цитата Сообщение от qwert228 Посмотреть сообщение
Попробовал так, но почему то он не заполняется никак
А какую смысловую нагрузку несёт этот кусок кода?
0
Эксперт .NET
11067 / 6984 / 1571
Регистрация: 25.05.2015
Сообщений: 21,060
Записей в блоге: 14
19.08.2022, 05:14 3
qwert228,
Это не рабочий код, потому что (даже если оптимизация не выкинет код)
всё изменение происходит мгновенно и добавление Sleep не поможет, т. к. очередь сообщений должна быть отработана.

Осваивайте работу с потоками как положено. А для вывода прогресса IProgress<T>.

Backgroundworker ошибка
0
2 / 2 / 0
Регистрация: 04.08.2018
Сообщений: 33
19.08.2022, 21:48 4
А какое поведение вы хотите получить? Даже если пока закрыть глаза на работу с потоками, то цикл практически мгновенно доведет progressBar1.Value до его максимального значения. Поэтому и на экране если бы и отображалось увеличение значения (а оно с таким кодом не будет отображаться), то Вы бы не заметили этого увеличения (ProgressBar сразу бы заполнился).

Добавлено через 35 минут
Покажу пример работающего кода. Возможно, он вам поможет. Создал форму, на которой расположил ProgressBar и Label. При клике на кнопку сбрасывается значение ProgressBar, а затем начинается постепенное увеличение этого значения. Защиты от создания одновременных задач, выхода до завершения задачи и так далее не делал, код исключительно для показа того, как можно реализовать постепенное увеличение значения ProgressBar.

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
private void button1_Click(object sender, EventArgs e)
{
    // Сбрасываем значение ProgressBar
    label1.Text = progressBar1.Minimum.ToString();
    progressBar1.Value = progressBar1.Minimum;
 
    // Запускаем асинхронную задачу
    var task = Task.Factory.StartNew(() =>
    {
        // Здесь находится асинхронный код
        // Цикл от минимального до максимального значения ProgressBar
        for (int i = progressBar1.Minimum; i <= progressBar1.Maximum; ++i)
        {
            /* 
                Приостанавливаем поток (делаем вид, что здесь происходит какая-то долгая операция,
                после которой требуется увеличить значение ProgressBar) 
            */
            Thread.Sleep(100);
 
            // Вызываем метод для выполнения кода в потоке окна
            this.Invoke(() =>
            {
                // Увеличиваем значение ProgressBar. Этот кусок выполняется уже в потоке окна
                progressBar1.Value = i;
                label1.Text = i.ToString();
            });
        }
    });
}
0
19.08.2022, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2022, 21:48
Помогаю со студенческими работами здесь

Ошибка при заполнении списка, весь список в цикле заполняется последними значениями
Доброго времени суток! Только недавно начала изучать питон, есть задача написать скрипт, который...

Не заполняется массив (только при выводе заполняется)
Создаю массив, пробовал и с двумерным, есть массив объектов класса, что имеет поля прямоугольник и...

Таблица заполняется на одних компьютерах и не заполняется на других
Всем доброго дня. Столкнулся с довольно странной проблемой. Довольно долго пользуюсь базой...

Как програмно в цикле не доходя до конца, пропустить шаг в цикле?
Как програмно в цикле не доходя до конца, пропустить шаг в цикле?

При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти
При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти. Что не так и как...

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure...


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

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