65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
1

Таймер в формах с интервалом в полсекунды

03.01.2013, 18:51. Показов 2943. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть форма с часами, нужно сделать, чтобы в какое-то конкретное время, допустим в 14:00:00 в каком-нибудь лейбле начался отсчёт от 1 до 10 с интервалом в пол-секунды. Как прикрутить таймер к этому отсчёту от 1 до 10? Вот что есть (здесь это срабатывает каждые 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
namespace Cuckoo
{
    public partial class Alert : Form
    {
        public Alert()
        {
            InitializeComponent();
 
            mainTimer.Enabled = true;
            mainTimer.Interval = 50;
        }
        private void Clock(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;
            currentTime.Text = now.ToLongTimeString();
            if (now.Second % 10 == 0)
                Alarm();
        }
        private void Alarm()
        {
            for (byte i = 1; i <= 10; i++)
                label1.Text = Convert.ToString(i); // Должно выполняться с интервалом 500 мс.
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2013, 18:51
Ответы с готовыми решениями:

Таймер с десятиминутным интервалом
Подскажите, как написать код для таймера, чтобы 00:00, 00:10, 00:20, 00:30 и т.д... Мозг уже...

Таймер с интервалом 24 часа
Доброго утра, форумчане! Нужно что бы определенное событие срабатывало раз в 24 часа. И тут у...

Таймер с интервалом 1 миллисекунда
Доброго времени суток) помогите с кодом пожалуйста!!! Нужен обработчик событий в каждую...

Таймер с переменным интервалом
Здравствуйте. Таким вот образом регулирую период кликов мышей: procedure...

11
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
03.01.2013, 19:02 2
Создай еще 1 таймер где
C#
1
timer2.Interval = 500;
и вместо метода
C#
1
Alarm();
запуска таймер
C#
1
timer2.Enabled = true;
.
0
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
03.01.2013, 19:16  [ТС] 3
Lirik5, так не функция Alarm должна выполнятся с интервалом, а одна строка в цикле только.
0
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
03.01.2013, 19:46 4
тогда попробуй сделать задержку
C#
1
System.Threading.Thread(500);
0
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
03.01.2013, 19:47  [ТС] 5
Lirik5, да это самое первое, что пришло в голову, но тогда стопорнётся ж весь процесс. Да и вообще суть в том, что я хочу понять, как подключать именно таймер в такой ситуации.
0
14 / 14 / 4
Регистрация: 31.12.2012
Сообщений: 71
03.01.2013, 20:13 6
Перечитай мой первый ответ , там эта проблема решается.
Кстати можно сделать и с помощью одного таймера.
0
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
03.01.2013, 23:47  [ТС] 7
Lirik5, я уже написал, что в нём не так. И интервал может быть не кратный, числа от балды взял.
0
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
04.01.2013, 10:25 8
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    // способ для извращенцев
 
    // какие-то действия ДО
    int i = 0;
 
    Timer timer = new Timer();
    timer.Interval = 500;
    timer.Tick += new EventHandler((_s, _e) =>
    {
        if (++i == 10)
        {
            timer.Stop();
            timer.Dispose();
        }
 
        // какие-то действия ПОСЛЕ
        label1.Text = i.ToString();
    });
 
    timer.Start();
0
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
05.01.2013, 07:29  [ТС] 9
Кстати, кто-нибудь может ещё знает, как сделать это событие в отдельном потоке? Я пробовал, но что-то не получается.

Добавлено через 10 минут
Doomer3D, а без извращений?

Добавлено через 7 минут
Doomer3D, кстати, реально извращение: цифра дёргается как эпилептическая. Такое не канает.
0
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
05.01.2013, 11:09 10
Цитата Сообщение от Necronomicron Посмотреть сообщение
Doomer3D, кстати, реально извращение: цифра дёргается как эпилептическая. Такое не канает.
Значит вы что-то не так сделали, я даже знаю что... Вы забыли остановить свой таймер, который спокойно продолжал работать и каждые 50 миллисекунд вызывал метод Alarm()...

Отдельный поток тут в принципе не нужен, достаточно одного. И мой метод не такой уж извращенский - это просто реализация таймера внутри метода.

Добавлено через 13 минут
Дополнительная переменная:
C#
1
private int lastSecond = -1;
Собственно главный таймер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void tmrMain_Tick(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;
            int nowSecond = now.TimeOfDay.Seconds;
 
            // проверка, что настала новая секунда
            if (nowSecond != lastSecond)
            {
                // проверка основного условия срабатывания таймера
                if (now.Second % 10 == 0)
                {
                    // какие-то действия
                    Alarm();
                }
                lastSecond = nowSecond;
            }
        }
Alarm:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void Alarm()
        {// какие-то действия ДО
            int i = 0;
 
            Timer timer = new Timer();
            timer.Interval = 500;
            timer.Tick += new EventHandler((_s, _e) =>
            {
                if (++i == 10)
                {
                    timer.Stop();
                    timer.Dispose();
                }
 
                // какие-то действия ПОСЛЕ
                label1.Text = i.ToString();
            });
 
            timer.Start();
        }
Теперь независимо от интервала таймера, срабатывать он будет не чаще раза в секунду. В вашей же программе в течение одной секунды таймер срабатывал 20 раз и 20 раз вызывал метод Alarm. Неудивительно, что числа "дергались"...
0
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
07.01.2013, 16:23  [ТС] 11
Цитата Сообщение от Doomer3D Посмотреть сообщение
Вы забыли остановить свой таймер, который спокойно продолжал работать и каждые 50 миллисекунд вызывал метод Alarm()...
А кто сказал, что его надо останавливать? Это часы, они должны работать всегда.

Добавлено через 5 минут
Блин, это же какой-то несчастный таймер, неужели никто не знает, как его по-простому прикрутить? Кстати, может есть какая-то годная литература ну или что-то типа курса именно по формам, а то в книге по C#, которую я читал, почти ничего не было про них?
0
37 / 37 / 6
Регистрация: 06.01.2013
Сообщений: 195
09.01.2013, 15:54 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
namespace Timer
{
    public partial class Form1 : Form
    {
        int i = 0;
        public Form1()
        {
            InitializeComponent();
            timer1.Interval = 50;
            timer2.Interval = 500;
            timer1.Enabled = true;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;
            label1.Text = now.ToLongTimeString();
 
            DateTime cloc = DateTime.Parse(textBox1.Text);
            string t_now = now.ToLongTimeString();
            string t_cloc = cloc.ToLongTimeString();
            if (t_cloc == t_now)
                timer2.Enabled = true;
 
        }
 
        private void timer2_Tick(object sender, EventArgs e)
        {
            if (i == 10) i = 0;
            else 
            {
                label2.Text = (i++).ToString();
            }
            
        }
    }
}
0
09.01.2013, 15:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2013, 15:54
Помогаю со студенческими работами здесь

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

Реализовать таймер с заданным интервалом
Господа, прошу помочь в решении элементарного вопроса. Имею следующий код (таймер). Все норм, все...

Как сделать таймер с интервалом меньше 15 мс?
C Builder XE3, хотя на других версиях думаю тоже самое. При установки интервала меньше 15 мс, он...

Таймер крутится с интервалом в 2 секунды вместо одной
Есть таймер отсчёта, проблема заключается в том что на некоторых хостингах время отображается...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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