Есть класс взят отсюда:
using System;
public class CountDownTimer : IDisposable
{
public Action TimeChanged;
public Action CountDownFinished;
public bool IsRunnign => timer.Enabled;
public int StepMs
{
get => timer.Interval;
set => timer.Interval = value;
}
private Timer timer = new Timer();
private DateTime _maxTime = new DateTime(1, 1, 1, 0, 30, 0);
private DateTime _minTime = new DateTime(1, 1, 1, 0, 0, 0);
public DateTime TimeLeft { get; private set; }
private long TimeLeftMs => TimeLeft.Ticks / TimeSpan.TicksPerMillisecond;
public string TimeLeftStr => TimeLeft.ToString("mm:ss");
public string TimeLeftMsStr => TimeLeft.ToString("mm:ss.fff");
private void TimerTick(object sender, EventArgs e)
{
if (TimeLeftMs > timer.Interval)
{
TimeLeft = TimeLeft.AddMilliseconds(-timer.Interval);
TimeChanged?.Invoke();
}
else
{
Stop();
TimeLeft = _minTime;
TimeChanged?.Invoke();
CountDownFinished?.Invoke();
}
}
public CountDownTimer(int min, int sec)
{
SetTime(min, sec);
Init();
}
public CountDownTimer(DateTime dt)
{
SetTime(dt);
Init();
}
public CountDownTimer()
{
Init();
}
private void Init()
{
TimeLeft = _maxTime;
StepMs = 1000;
timer.Tick += new EventHandler(TimerTick);
}
public void SetTime(DateTime dt) {
TimeLeft = _maxTime = dt;
TimeChanged?.Invoke();
}
public void SetTime(int min, int sec=0) => SetTime(new DateTime(1, 1, 1, 0, min, sec));
public void Start() => timer.Start();
public void Pause() => timer.Stop();
public void Stop()
{
Pause();
Reset();
}
public void Reset()
{
TimeLeft = _maxTime;
}
public void Restart()
{
Reset();
Start();
}
public void Dispose() => timer.Dispose();
}
Вызов:
CountDownTimer timer = new CountDownTimer();//создаем инстанс
timer.SetTime(1,0); //выставляем на 1 минуту
timer.StepMs = 33; //Выставляем шаг таймера (как часто вызывается TimeChanged)
//Подписываемся на событие TimeChanged и в нем обновляем значение лейбла
timer.TimeChanged += () => Label1.Text = timer.TimeLeftMsStr;
// Подписываемся на событие окончания таймера и реагируем на него сообщухой
timer.CountDownFinished += () => MessageBox.Show("Timer finished the work!");
timer.Start(); //стартуем
Как изменить секунды чтобы было не 999 а от 60 сек ?
Получается сейчас такой вид: 10:10.999 а нужно 10:10:60 - Одна минута 60 секунд.
И с помощью этого класса можно реализовать не обратный отсчёт а наоборот текущее время и дата сделать ( ну или к дополнению ) ?
[Последнее изменение в коде]
private void Form_Load(object sender, EventArgs e)
{
CountDownTimer timer = new CountDownTimer();//создаем инстанс
timer.SetTime(1,0); //выставляем на 1 минуту
//timer.StepMs = 33; //Выставляем шаг таймера (как часто вызывается
TimeChanged)
//Подписываемся на событие TimeChanged и в нем обновляем значение лейбла
timer.TimeChanged += () => Label1.Text = timer.TimeLeftStr;
// Подписываемся на событие окончания таймера и реагируем на него сообщухой
timer.CountDownFinished += () => MessageBox.Show("Timer finished the work!");
timer.Start(); //стартуем
}
В самом классе CountDownTimer изменил метод TimeLeftStr
public string TimeLeftStr => this.TimeLeft.ToString("hh:mm:ss");
После идёт отсчёт: 12:00:59
Но этот код не работает:
CountDownTimer timer = new CountDownTimer();//создаем инстанс
timer.SetTime(1,0);
Не заменяет на нужное, всегда с 12 начинает.
Вам нужен вот такой формат для даты HH:mm:ss
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть подготовленное окно для показа диалога, но как дошло дело до его показа, я не понимаю как отобразить это окно как диалог
После нажатия кнопки поток отключает доступ к программе, я не могу даже выйти из программыЧто мне делать
В C# в структурах запрещено использовать конструктор без параметров, так как он используется для инициализации членов структуры (обнуления...
Для проекта на netcore 22 понадобилось использовать библиотеку скомпилированную под X86 NetFramework 4