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

Как сделать задержки во время выполнения цикла?

17.06.2024, 23:50. Показов 819. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим, есть цикл

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 1; i < Form1.mapSize; i++)
{
     for (int j = 1; j < Form1.mapSize; j++)
     {
          if (isInsideMap(i, j) && map1[i, j].Text == "")
          {
               if (Form1.positions[i, j] == 'o')
               {
                    map1[i, j].BackColor = Color.Red;
               }                       
          }                    
      }
}
Мне нужно, чтобы после каждой итерации была задержка перед выполнением следующей.
Если вписываю в цикл sleep, то просто сам этот цикл задерживается на заданное время, а все итерации срабатывают одновременно.

Как задать задержку между итерациями?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2024, 23:50
Ответы с готовыми решениями:

QUdpSocket. Как сделать время задержки 0,5 мс
Здравствуйте уважаемые. Передаю пакеты - 1032 байта в одном. Передаю 65525 пакетов. Надо передать не более чем за 32,7 секунды. ...

Как вычислить время выполнения цикла?
Обычно для вычисления времени выполнения чего-нибудь я пользуюсь функцией clock() из библиотеки ctime. Отслеживаю время в начале...

Как задать время выполнения цикла в секундах?
Здравствуйте. кусок кода для вывода строки текста на экран const char string1 = &quot;sample of text&quot;; HDC dc =...

7
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
18.06.2024, 09:00
Цитата Сообщение от zkan04 Посмотреть сообщение
Если вписываю в цикл sleep, то просто сам этот цикл задерживается на заданное время, а все итерации срабатывают одновременно.
вставить паузу внутри цикла?
0
2 / 1 / 1
Регистрация: 17.04.2020
Сообщений: 13
18.06.2024, 09:21  [ТС]
Цитата Сообщение от zkan04 Посмотреть сообщение
Если вписываю в цикл sleep, то просто сам этот цикл задерживается на заданное время, а все итерации срабатывают одновременно.
не получается
0
18.06.2024, 09:48

Не по теме:

Цитата Сообщение от zkan04 Посмотреть сообщение
не получается
Я бы тебе подсказал как сделать легко и просто, но тут есть один маньяк, у которого от такого кода случится обострение, поэтому промолчу, жалко его.

0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,527
Записей в блоге: 14
18.06.2024, 12:37
Лучший ответ Сообщение было отмечено zkan04 как решение

Решение

Не по теме:

I can, ага, лучше помолчи, любитель херакс-херакс-и-в-продакшн+а-дальше-трава-не-расти.



zkan04,
1 способ:
Поставьте на форму таймер с нужным интервалом и запустите его.
В коде обработчика за один вызов увеличивайте j.
Если j дошло до границы, сбросьте его и увеличьте i.
Если i дошло до границы, остановите таймер.
С текущими i и j выполните нужные действия.

2 способ:
Запустить поток или задачу с вот этим циклом, как есть, и нужной задержкой, и через тот же Invoke отправлять нужные изменения в поток UI.

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

Добавлено через 42 минуты
zkan04,
Пример первого способа на скорую руку :
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;
 
namespace IterationDemo
{
    public partial class Form1 : Form
    {
        private Timer timer;
        private IEnumerator<Tuple<int, int>> enumerator;
 
        public Form1()
        {
            InitializeComponent();
 
            enumerator = GetNext().GetEnumerator();
 
            timer = new Timer();
            timer.Interval = 50;
            timer.Tick += Timer_Tick;
            timer.Start();
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            if (enumerator.MoveNext())
            {
                var state = enumerator.Current;
 
                Text = $"{state.Item1} : {state.Item2}";
                Debug.WriteLine(Text);
            }
            else
            {
                timer.Stop();
            }
        }
 
        private IEnumerable<Tuple<int, int>> GetNext()
        {
            for (int i = 1; i < 5; i++)
            {
                for (int j = 1; j < 6; j++)
                {
                    yield return (new Tuple<int, int>(i, j));
                }
            }
        }
    }
}
1
2 / 1 / 1
Регистрация: 17.04.2020
Сообщений: 13
18.06.2024, 12:59  [ТС]
Rius, спасибо!
через таймер что-то да получилось
0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,527
Записей в блоге: 14
18.06.2024, 13:02
zkan04, учтите, что этот способ пригоден в том случае, если в коде обработки таймера нет значительной вычислительной нагрузки, т.е. время выполнения должно быть не более единиц миллисекунд.
Иначе форма будет тормозить в реакции на все события.
В этом случае надо будет переходить на потоки.
1
0 / 0 / 0
Регистрация: 23.11.2023
Сообщений: 44
18.06.2024, 18:35
Можно использовать:
C#
1
await System.Threading.Tasks.Task.Delay(время в мс);
А в метод дописать модификатор async.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2024, 18:35
Помогаю со студенческими работами здесь

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

Как задать точное время выполнения цикла в pascal?
Мне нужно чтобы цикл while выполнялся за строго определённый промежуток времени. К примеру мне нужно выполнить 100 циклов за секунду. Тогда...

Как обновлять окно PyQt во время выполнения длительного цикла из другого модуля
Windows 11 Python 3.10 Package Version ------------------ ----------- beautifulsoup4 4.11.1 bs4 ...

Как сделать задержку выполнения цикла?
Мне надо притормозить цикл: pex=0; while (pex&lt;=100) { pex+=10; repaint(); wait(1000); //задежка выполнения цикла } Но...

Как сделать, чтобы ProgressBar отображал прогресс выполнения цикла
Пришла очередь разобраться с ProgressBar. Сделал следующие: 1. Создал форму, 2. подключил Microsoft Windows Common Controls, 3....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
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 Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru