#c# #xamarin.forms #mvvm
Вопрос:
Я хочу, чтобы мой таймер продолжался с момента его запуска до настоящего времени, мне нужна помощь с логикой, которая использует интервал времени для вычисления времени, прошедшего с момента запуска таймера до текущего времени, Вот что я сделал:
CancellationTokenSource cts = _cancellationTokenSource; // safe copy
//Timer Starts here
_TimeSpan = TimeSpan.FromMinutes(TimeSheet.TotalTime);
//Increment timer by a second interval
Device.StartTimer(TimeSpan.FromSeconds(1), () => {
if (cts.IsCancellationRequested)
{
return false;
}
else
{
Device.BeginInvokeOnMainThread(() => {
_TimeSpan = TimeSpan.FromSeconds(1);
displaytime = _TimeSpan.ToString(@"h:m:s");
TimeSheet.TotalTimeForDisplay = displaytime;
Console.WriteLine("Timer");
Console.WriteLine(displaytime);
});
return true;
}
Комментарии:
1. @Джейсон, похоже, у класса секундомера нет параметров, чтобы указать, где должен начинаться секундомер
2. Я бы использовал что-то из Системы. Вместо этого реактивный набор инструментов. Там есть хорошие наблюдаемые параметры, такие как интервал, тайм-аут и т. Д.
Ответ №1:
использовать System.Timers.Timer
// use whatever start time you need
DateTime start = DateTime.Now;
// 1000ms = 1s
System.Timers.Timer timer = new System.Timers.Timer(1000);
timer.Elapsed = OnTimedEvent;
timer.Start();
затем
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
var elapsed = DateTime.Now - start;
}
Комментарии:
1. Для моего таймера запуска я использую _TimeSpan = Промежуток времени. От минут(расписание. totalTime); нужно ли мне конвертировать в DateTime?
2. Я не знаю. Вы не описали, каковы ваши требования, поэтому я не могу сказать, какова правильная ценность для использования.