С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/75: Рейтинг темы: голосов - 75, средняя оценка - 4.81
8 / 10 / 8
Регистрация: 30.12.2013
Сообщений: 577
1
.NET 4.x

Таймер обратного отсчета и вывод в Label времени в формате чч:мм:сс

26.01.2015, 21:40. Показов 15304. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите реализовать. У меня есть таймер в 3 часа (10800000 ms)
Мне нужно чтобы этот отсчет выводил в лабейл время оставшиеся например: 3:00:00 через секунду 2:59:59 еще через сек 2:59:58 и так далее. Пока не дойдет до 0:00:00 и если все по нулям выполняем блок кода.
Свой вариант кода я даже показывать не буду позориться. Помогите сделать ото я даже не понимаю как это сделать.
0
Лучшие ответы (1)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
26.01.2015, 21:40
Ответы с готовыми решениями:

Таймер обратного отсчета в формате чч:мм:сс
Мой таймер считает минуты и секунды. Подскажите, как добавить чтобы считало количество часов. И...

Таймер обратного отсчета для теста (Label)
На форуме очень много вопросов есть сразу извиняюсь! Я нашел код правда я думаю что нужно делать в...

Таймер обратного отсчета времени
Всем привет если кто может помогите написать программу таймер отсчета времени с 5 мин до 0 и...

Таймер обратного отсчета с редактированием времени
Здравствуйте, пробую написать код таймера на ХТМЛ и ПХП, что бы таймер допустим шел от 3 дней 12...

14
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.01.2015, 22:01 2
Что-то в таком духе:
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
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Timers;
 
class Program
{
    static void Main()
    {
        using (var timer = new MyTimer(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(1)))
        {
            timer.Tick += (sender, span) => Console.WriteLine(span);
            timer.Start();
            Console.ReadKey();
        }
    }
}
 
 
 
internal class MyTimer : IDisposable
{
    public event EventHandler<TimeSpan> Tick = delegate { };
    public TimeSpan Max { get; private set; }
    public TimeSpan Interval { get; private set; }
    private Timer _timer;
 
    public MyTimer(TimeSpan max, TimeSpan interval)
    {
        Max = max;
        Interval = interval;
        _timer = new Timer(Interval.TotalMilliseconds);
        _timer.Elapsed += (sender, args) =>
        {
            Max -= Interval;
            Tick(this, Max);
        };
    }
 
    public void Start()
    {
        _timer.Start();
    }
 
    public void Stop()
    {
        _timer.Stop();
    }
 
    public void Dispose()
    {
        if (IsDisposed)
            throw new ObjectDisposedException("MyTimer");
        lock (_timer)
            if (!IsDisposed)
            {
                _timer.Stop();
                _timer = null;
            }
    }
 
    public bool IsDisposed
    {
        get { return _timer == null; }
    }
}
0
8 / 10 / 8
Регистрация: 30.12.2013
Сообщений: 577
26.01.2015, 22:01  [ТС] 3
Таймер с интервалом в 1 ms:
C#
1
2
3
4
5
interval--;
            int hour = interval / 1000 / 60 / 60;
            int min = (interval / 1000 / 60) / (10800000 / 1000 / 60 / 60);
            int sec = interval / 1000 / (10800000 / 1000 / 60);
            label1.Text = hour + ":" + min + ":" + sec;
Но у меня похоже что-то с расчетами не верно...
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.01.2015, 22:03 4
Точнее так:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Timers;
 
class Program
{
    static void Main()
    {
        using (var timer = new MyTimer(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(1)))
        {
            timer.Tick += (sender, span) => Console.WriteLine(span);
            timer.Start();
            Console.ReadKey();
        }
    }
}
 
 
 
internal class MyTimer : IDisposable
{
    public event EventHandler<TimeSpan> Tick = delegate { };
    public TimeSpan Max { get; private set; }
    public TimeSpan Interval { get; private set; }
    private Timer _timer;
 
    public MyTimer(TimeSpan max, TimeSpan interval)
    {
        Max = max;
        Interval = interval;
        _timer = new Timer(Interval.TotalMilliseconds);
        _timer.Elapsed += (sender, args) => OnTick();
    }
 
    private void OnTick()
    {
        Tick(this, Max);
        Max -= Interval;
    }
 
    public void Start()
    {
        OnTick();
        _timer.Start();
    }
 
    public void Stop()
    {
        _timer.Stop();
    }
 
    public void Dispose()
    {
        if (IsDisposed)
            throw new ObjectDisposedException("MyTimer");
        lock (_timer)
            if (!IsDisposed)
            {
                _timer.Stop();
                _timer = null;
            }
    }
 
    public bool IsDisposed
    {
        get { return _timer == null; }
    }
}
2
Эксперт .NET
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.01.2015, 22:09 5
Лучший ответ Сообщение было отмечено FreeZon как решение

Решение

Цитата Сообщение от FreeZon Посмотреть сообщение
я даже не понимаю как это сделать.
К примеру так. Форма, кнопка и лейбл.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication4 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            button1.Click += button1_Click;
        }
 
        void button1_Click(object sender, EventArgs e) {
            StartTimer();
        }
        void StartTimer() {
            TimeSpan ts = new TimeSpan(3, 0, 0);
            Task.Factory.StartNew(() => {
                while (ts.Hours!=0) { 
                    label1.Invoke((Action)(() => { label1.Text = ts.ToString(); }));
                    Thread.Sleep(1000);
                    ts = ts.Subtract(new TimeSpan(0, 0, 1));
                }
                //Тут ставим действие по окончании таймера.
            });
        }
    }
}
Добавлено через 1 минуту
Psilon, как-то много букафф для такой простой задачи.
2
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
26.01.2015, 22:13 6
Посмотрите, может подойдет :
Обратный отсчет времени в формате "H:mm:ss"
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.01.2015, 23:06 7
insite2012, хз, предпочитаю один раз решать задачу и потом пользоваться готовым решением, а наследовать в терминах ущербно-ориентированного программирования - не моё
0
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
16.05.2016, 16:11 8
А если например надо отсчет от 1,0,0 или вообще 0,1,0 то как быть?
0
6 / 4 / 2
Регистрация: 24.11.2019
Сообщений: 26
25.11.2019, 17:29 9
insite2012, как сделать так, чтобы при открытии формы TestForm
начался отсчет 15:00:59 15:00:58 и т.д. чтобы это отображалось в label2
и когда 15 мин. вышли, то форма просто закрылась автоматически.

Запускать таймер должна форма TestForm

Ваш код:

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication4 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            button1.Click += button1_Click;
        }
 
        void button1_Click(object sender, EventArgs e) {
            StartTimer();
        }
        void StartTimer() {
            TimeSpan ts = new TimeSpan(3, 0, 0);
            Task.Factory.StartNew(() => {
                while (ts.Hours!=0) { 
                    label1.Invoke((Action)(() => { label1.Text = ts.ToString(); }));
                    Thread.Sleep(1000);
                    ts = ts.Subtract(new TimeSpan(0, 0, 1));
                }
                //Тут ставим действие по окончании таймера.
            });
        }
    }
}
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.11.2019, 18:14 10
Что-то в таком духе:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace WindowsFormsApplication4 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            Task.Run(() => StartTimer());
        }
 
        async void StartTimer() {
            TimeSpan ts = new TimeSpan(0, 15, 0);
            while (ts > TimeSpan.Zero) {
                label1.Invoke((Action)(() => { label1.Text = ts.ToString(); }));
                await Task.Delay(1000);
            }
            Close();
        }
    }
}
1
Эксперт .NET
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.11.2019, 18:19 11
Цитата Сообщение от rudeuk Посмотреть сообщение
как сделать так
Коллега Psilon показал вам пример. Сам я, к сожалению, уже постепенно отхожу от дотнета, перешел на C++/Qt.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.11.2019, 18:24 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
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1() {
            InitializeComponent();
            Load += (sender, args) => Task.Run(StartTimer);
        }
 
        private async void StartTimer() {
            TimeSpan ts = new TimeSpan(0, 15, 0);
            while (ts > TimeSpan.Zero) {
                label1.Invoke((Action)(() => { label1.Text = ts.ToString(); }));
                await Task.Delay(1000);
                ts -= TimeSpan.FromSeconds(1);
            }
            Close();
        }
    }
}
постепенно отхожу от дотнета, перешел на C++/Qt.
Какой ужас
1
6 / 4 / 2
Регистрация: 24.11.2019
Сообщений: 26
25.11.2019, 18:26 13
Psilon, не работает. просто висит 0:15:0 и всё.
не идет обратного отсчета, и форма не закрывается.
скомпилировалось без ошибок.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace project
{
    public partial class TestForm : Form
    {
        public TestForm()
        {
            InitializeComponent();
            Task.Run(() => StartTimer());
        }
 
        async void StartTimer()
        {
            TimeSpan ts = new TimeSpan(0, 15, 0);
            while (ts > TimeSpan.Zero)
            {
                label2.Invoke((Action)(() => { label2.Text = ts.ToString(); }));
                await Task.Delay(1000);
            }
            Close();
        }
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.11.2019, 18:32 14
rudeuk, все верно, я же показал примерно как будет выглядеть. Тут нет вычитания таймера же. Я потом показал итоговый вариант. Его можно подсократить и выкинуть таск ран и инвоки:

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
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1() {
            InitializeComponent();
            Load += (sender, args) => StartTimer();
        }
 
        private async void StartTimer()
        {
            TimeSpan ts = new TimeSpan(0, 0, 5);
            while (ts > TimeSpan.Zero) {
                label1.Text = ts.ToString();
                await Task.Delay(1000);
                ts -= TimeSpan.FromSeconds(1);
            }
            Close();
        }
    }
}
Но это уже детали.
1
6 / 4 / 2
Регистрация: 24.11.2019
Сообщений: 26
25.11.2019, 18:36 15
Psilon, спасибо! всё заработало +1
0
25.11.2019, 18:36
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
25.11.2019, 18:36
Помогаю со студенческими работами здесь

Таймер обратного отсчета с добавлением времени когда угодно
Здарвствуйте, пробую написать код таймера на ХТМЛ и ПХП, что бы таймер допустим шел от 3 дней 12...

Реализовать таймер обратного отсчета и по истечении времени показать надпись
Ребят помогите пожалуйста, нужен таймер обратного отсчета на штмл сайт , нужно что бы он показывал...

Как сделать таймер обратного отсчёта с выводом оставшегося времени в поле
Не подскажите как сделать таймер обратного отсчёта с выводом оставшегося времени в поле? Я слышал...

Таймер обратного отсчёта. Вывод TextOut
Привет форумчане) В общем нужен таймер 60,59,58,57,56... Ну это понятно, он запускается...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Блоги программистов
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(шес­­­­­­тиби­тный асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru