Таймер C# на несколько дней

#c# #timer

Вопрос:

Я использовал Систему.Нарезание резьбы.Таймер в моем проекте, как код ниже:

 async Task Timer()
{
    timer = new System.Threading.Timer((_) =>
    {
        TimeSpan span = DateTime.Now.Subtract(ed);
        Time = (TimeSpan.FromTicks(span.Ticks).ToString()).Substring(0, 8);
        InvokeAsync(() =>
        {
            StateHasChanged();
        });
    }, null, 0, 1000);
}
 

он вычитает два разных времени и покажет таймер. Все работает нормально, пока не пройдет еще 24 часа.
Вот мой вопрос. Как я должен изменить свой код, чтобы показывать таймер даже через 24 часа?
Заранее спасибо

Комментарии:

1. 1000 миллисекунд = 1 секунда. 1 день = 24 часа * 60 минут * 60 секунд * 1000 миллисекунд = 86400000 миллисекунд. Документы для конструктора, который вы используете .

2. Every thing works fine until it is not still 24H. И что происходит потом? Как конкретно это не работает?

3. Расскажите нам, чего .Substring(0, 8); вы пытаетесь достичь.

4. Я не вижу смысла в том, чтобы ваш метод был async Task Timer() . Это не делает никаких ожиданий.

5. Кстати, я бы использовал Rx. Тогда вы могли бы сделать это Observable.Interval(TimeSpan.FromDays(1.2)).Subscribe(x => { /* Do stuff */ }); .

Ответ №1:

Временные промежутки увеличиваются до уровня дней, они не останавливаются на подсчете часов. Если у вас есть промежуток времени, равный 23:59:59, и вы добавляете к нему секунду, вы не получаете 24:00:00, вы получаете 1 день 00:00:00

Если вы хотите, чтобы это считалось часами вечно, вам придется самому умножить дни на часы

 $"{t.Days*24 t.Hours}:{t.Minutes}:{t.Seconds}"
 

Вы также можете сократить десятичную часть от общего количества часов

 $"{(int)t.TotalHours}:{t.Minutes}:{t.Seconds}"

$"{t.TotalHours:F0}:{t.Minutes}:{t.Seconds}"