binadi007 Ответов: 1

Таймер обратного отсчета в обратном порядке


Привет,

Я создал таймер обратного отсчета, код которого выглядит так:
protected void Timer1_Tick(object sender, EventArgs e)
    {
        try
        {
            dt1 = dt1.AddSeconds(1);
Label4.Text = (TimeSpan.FromHours(2D) - TimeSpan.FromSeconds(dt1.Second)).ToString("hh\\:mm\\:ss");
}
}


Но вышеприведенный код работал всего 1 минуту. в обратном порядке повторение повторяется снова. Можно ли создать таймер в обратном порядке на 1/2 часа.

Пожалуйста, предоставьте фрагмент

Заранее большое спасибо

Что я уже пробовал:

Вышеприведенный код я попробовал, и результат получается такой 01:59:59, 01:59:58 и так далее.

1 Ответов

Рейтинг:
8

OriginalGriff

Вместо того чтобы использовать DateTime и изменять его, возьмите текущее время при запуске таймера и установите целевое время:

private DateTime target;
...
target = DateTime.Now.AddMinutes(30);
Timer1.Start();

Затем в вашем обработчике тиков проверьте разницу:
void Timer1_Tick(object sender, EventArgs e)
    {
    TimeSpan diff = target - DateTime.Now;
    if (diff.TotalSeconds <= 0)
        {
        myTextBox.Text = "Done!";
        Timer1.Stop();
        }
    else
        {
        myTextBox.Text = ((int) diff.TotalSeconds).ToString();
        }
    }
Таким образом, он будет работать практически с любым смещением и будет намного более точным.


binadi007

Привет OriginallGriff,
У меня есть некоторые сомнения,
1) где вызвать "target = DateTime. Now. AddMinutes(30);" (я caling Timer1. Start () из файла aspx, то есть по тегу & lt;asp:timer> )
2) мне нужно оставшееся время в формате hh:mm:ss, а не в секундах, о которых упоминает myTextBox.Text = ((int) diff.Итого секунд).Метод toString();

Большое спасибо за помощь

OriginalGriff

Правильно-не делайте этого в C# вообще, даже не ставьте там таймер.
Для веб-сайтов вы хотите, чтобы таймер обрабатывался на клиенте, а не на сервере: поэтому делайте обратный отсчет в Javascript, а не в C#.
Создать таймер обратного отсчета в 18 строк кода JavaScript[^]

binadi007

да, вы правы, и я тоже это осуществлю, но на данный момент Вы можете дать ответ на эти 2 вопроса, т. е.:-
1) где вызвать "target = DateTime. Now. AddMinutes(30);" (я caling Timer1. Start () из файла aspx, то есть по тегу & lt;asp:timer> )
2) мне нужно оставшееся время в формате hh:mm:ss, а не в секундах, о которых упоминает myTextBox.Text = ((int) diff.Итого секунд).Метод toString();

спасибо

OriginalGriff

Нет-потому что это совершенно бессмысленно, так как находится не на той стороне.