Встроенный таймер не обеспечивает оставшееся время до истечения срока. Вам нужно создать свой собственный класс, который обертывает таймер и раскрывает эту информацию.
Что-то вроде этого должно работать.
public class TimerPlus : IDisposable
{
private readonly TimerCallback _realCallback;
private readonly Timer _timer;
private TimeSpan _period;
private DateTime _next;
public TimerPlus(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period)
{
_timer = new Timer(Callback, state, dueTime, period);
_realCallback = callback;
_period = period;
_next = DateTime.Now.Add(dueTime);
}
private void Callback(object state)
{
_next = DateTime.Now.Add(_period);
_realCallback(state);
}
public TimeSpan Period
{
get
{
return _period;
}
}
public DateTime Next
{
get
{
return _next;
}
}
public TimeSpan DueTime
{
get
{
return _next - DateTime.Now;
}
}
public bool Change(TimeSpan dueTime, TimeSpan period)
{
_period = period;
_next = DateTime.Now.Add(dueTime);
return _timer.Change(dueTime, period);
}
public void Dispose()
{
_timer.Dispose();
}
}
Выше и за пределами вызова, но проверили вас для ваших усилий. Спасибо, Вы очень добры. У меня уже есть метод, который будет вычислять, сколько времени должно быть оставлено, но хотел подтвердить его с помощью результата самого объекта самого таймера. Плохо это по своей сути не предоставляется. –
+1 Спасибо за этот полезный код, Сэм! – BillW
Да, он тоже написал это быстро. Впечатляет. –