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

Выполнение цикла по таймеру

31.05.2014, 16:25. Показов 6273. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть вот такой код:
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
 private Color[,] ALL1; 
        private void button_follow_Click(object sender, EventArgs e)
        {
            double proc_result = 100;
            double equalPixels = 0;           
                    Bitmap bmp1 = new Bitmap(pictureBox2.Image);
                  
                    ALL1 = new Color[x_Md, y_Md];
 
 
                    for (int i = (x_MouseDown); i < x_Md; i++)
                    {
                        for (int j = (y_MouseDown); j < y_Md; j++)
                        {
                            ALL1[i, j] = bmp1.GetPixel(i, j);                        
                        }
                    }
                    while (proc_result >= 90)
                    {
                        timer.Start();
                        Bitmap bmp2 = new Bitmap(pictureBox2.Image);
                        Color[,] ALL2 = new Color[x_Md, y_Md]; //Массив для цветов пикселей.
                      
                        for (int i = x_MouseDown; i < x_Md; i++)
                        {
                            for (int j = y_MouseDown; j < y_Md; j++)
                            {
                                ALL2[i, j] = bmp2.GetPixel(i, j); 
                            }
                        }
                       
                        for (int i = 0; i < x_Md; i++)
                            for (int j = 0; j < y_Md; j++)
                                if (ALL1[i, j] == ALL2[i, j])
                                    ++equalPixels;
 
                      
                        proc_result -= (allPixels / equalPixels);
                      
                    }
                    if (proc_result < 90)
                    {
                        pictureBox1.Image.Save("picture.jpg");
                        timer.Enabled = false; MessageBox.Show("бла-бла-бла");
                    }
               
        }
 
        private void timer_Tick(object sender, EventArgs e)
        {
            canny();            
        }
мне нужно чтобы цикл while у меня выполнялса через каждые 3 сек
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2014, 16:25
Ответы с готовыми решениями:

Медленное выполнение цикла
Приветствую! Такой вопрос: создал поток, в нем бесконечный цикл, увеличивающий число на 1. Но выполняется он крайне медленно: от 1 до 100...

Выполнение второго цикла за первым
вот есть textBox1 и textBox2. Как сделать, если выразится не понятно и как-то не так как положено, то так будет: цикл - от цифры до цифры...

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

12
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
31.05.2014, 16:35
Lagolass, выноси цикл отдельно в метод , и запускай этот метод в таймере каждые три секунды
0
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
31.05.2014, 16:58  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
Lagolass, выноси цикл отдельно в метод , и запускай этот метод в таймере каждые три секунды
как?,например
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
31.05.2014, 17:07
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
private timer1_Tick(object sender, EventArgs e)
{
                    double proc_result = 100;
                    double equalPixels = 0;
                    while (proc_result >= 90)
                    {
                        Bitmap bmp2 = new Bitmap(pictureBox2.Image);
                        Color[,] ALL2 = new Color[x_Md, y_Md]; //Массив для цветов пикселей.
                      
                        for (int i = x_MouseDown; i < x_Md; i++)
                        {
                            for (int j = y_MouseDown; j < y_Md; j++)
                            {
                                ALL2[i, j] = bmp2.GetPixel(i, j); 
                            }
                        }
                       
                        for (int i = 0; i < x_Md; i++)
                            for (int j = 0; j < y_Md; j++)
                                if (ALL1[i, j] == ALL2[i, j])
                                    ++equalPixels;
 
                      
                        proc_result -= (allPixels / equalPixels);
                      
                    }
}
Добавлено через 34 секунды
выставляй интервал на 3000, запускай где тебе надо так timer.Start();
0
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
31.05.2014, 17:24  [ТС]
Metall_Version, сделал, и никакой разницы, все равно подвисает программа после начала работы таймера
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
31.05.2014, 17:27
Цитата Сообщение от Lagolass Посмотреть сообщение
мне нужно чтобы цикл while у меня выполнялса через каждые 3 сек
ну я тебе помог эту задачу решить..
0
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
31.05.2014, 18:07  [ТС]
сделал так
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
private timer1_Tick(object sender, EventArgs e)
{
          double proc_result = 100;
            double equalPixels = 0;
          
                canny();
                Bitmap bmp2 = new Bitmap(pictureBox2.Image);
                Color[,] ALL2 = new Color[x_Md, y_Md]; //Массив для цветов пикселей.
 
                for (int i = x_MouseDown; i < x_Md; i++)
                {
                    for (int j = y_MouseDown; j < y_Md; j++)
                    {
                        ALL2[i, j] = bmp2.GetPixel(i, j); //Получаем все цвета в массив.
                    }
                }
 
                for (int i = 0; i < x_Md; i++)
                    for (int j = 0; j < y_Md; j++)
                        if (ALL1[i, j] == ALL2[i, j])
                            ++equalPixels;
 
              
                proc_result -= (allPixels / equalPixels);
 
         
            if (proc_result < 90)
                    {
                        pictureBox1.Image.Save("picture.jpg");
                        timer.Enabled = false; MessageBox.Show("бла-бла-бла");
                    }
}
то теперь масивы ALL1[i, j] ALL2[i, j] всегда одинаковые при проверке получаютса

Добавлено через 57 секунд
Цитата Сообщение от Metall_Version Посмотреть сообщение
Сообщение от Lagolass
мне нужно чтобы цикл while у меня выполнялса через каждые 3 сек
ну я тебе помог эту задачу решить..
ну да, спс

Добавлено через 34 минуты
Metall_Version, а возможно ли в самом цикле while выполнялось вот это условие каждые 3 сек:
C#
1
2
3
4
for (int i = 0; i < x_Md; i++)
                    for (int j = 0; j < y_Md; j++)
                        if (ALL1[i, j] == ALL2[i, j])
                            ++equalPixels;
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
31.05.2014, 18:21
Цитата Сообщение от Lagolass Посмотреть сообщение
Metall_Version, а возможно ли в самом цикле while выполнялось вот это условие каждые 3 сек:
чтобы прога не висела нет

Добавлено через 21 секунду
напишите для начало что нужно , там подскажем как надо
0
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
31.05.2014, 19:10  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
напишите для начало что нужно , там подскажем как надо
мне нужно чтобы через каждые 3 сек сначала перерисовывалась картинка на ПикчерБоксе(это делает метод canny()) потом создаетса масив в который записуетса часть этой картинки, и тогда этот масив сравниваетса с другим ранее записаным масивом - если % совпадания меньше 90% то мы останавливаем таймер и выкидуем соответственое окошко из сообщением об этом - всё это я пыталса реализовывать в while
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
31.05.2014, 19:39
Lagolass, запустите цикл в отдельном потоке и через каждые три секунды делайте что вам надо.
0
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
31.05.2014, 19:51  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
запустите цикл в отдельном потоке и через каждые три секунды делайте что вам надо.
insite2012, если бы же я знал как это зделать
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
31.05.2014, 20:10
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApplication55
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Factory.StartNew(() => 
            {
                while (true)
                {
                    Console.WriteLine("Thread is running!");
                    Thread.Sleep(3000);
                }
            });
            Console.ReadLine();
        }
    }
}
0
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
31.05.2014, 20:39  [ТС]
запускал, в итоге выскакивает ошибка "В данный момент объект используется другим процессом"
наверно оставлю как было
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.05.2014, 20:39
Помогаю со студенческими работами здесь

Как правильно запустить многопоток на выполнение цикла?
Крч, есть код, есть действие которое выполняется секунды 2 (1 цикл) а циклов по выбору, и использую много try catch кастыли крч , там у...

Можно ли задержать выполнение цикла на время с использованием таймера?
Здравствуйте. Сам не программист, но тем не менее пишу программу, по ходу которой выполняется цикл, который нужно поставить на паузу на...

Выполнение действия по таймеру
Здравствуйте, подскажите пожалуйста, надо по клику на кнопку показать Layaut, а через 4 секунды скрыть. Но при повторном нажатии время...

Выполнение по таймеру функции
Добрый день! Задача выполнять по таймеру функцию, делал раньше следующим способом System.Timers.Timer t1 = new...

Выполнение действия по таймеру
Здравствуйте. Подскажет пожалуйста, каким образом можно решить следующую задачу: Необходимо при при выполнении некоего условия запускать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru