System.Timers.Timer如何获得前的剩余时间消逝
-
21-09-2019 - |
题
使用C#,如何可能得到的剩余时间(之前将发生的经过事件)从System.Timers.Timer
对象?
在换句话说,让我说的定时器时间间隔设置为6小时,但3个小时后,我想知道多少时间剩余。我该如何获得计时器对象,显示该剩余时间?
解决方案
内置的计时器不提供剩余直到经过的时间。你需要创建自己的类,它封装了一个计时器,并公开此信息。
这样的事情应该工作。
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();
}
}
其他提示
我知道,那个题目是超过3岁。不过我碰到它,而正是解决同样的问题。
由Samuel内夫启发,我通过扩展标准System.Timers.Timer类想出了一个WinForms少溶液:
public class TimerPlus : System.Timers.Timer
{
private DateTime m_dueTime;
public TimerPlus() : base()
{
this.Elapsed += this.ElapsedAction;
}
protected new void Dispose()
{
this.Elapsed -= this.ElapsedAction;
base.Dispose();
}
public double TimeLeft
{
get
{
return (this.m_dueTime - DateTime.Now).TotalMilliseconds;
}
}
public new void Start()
{
this.m_dueTime = DateTime.Now.AddMilliseconds(this.Interval);
base.Start();
}
private void ElapsedAction(object sender, System.Timers.ElapsedEventArgs e)
{
if (this.AutoReset)
{
this.m_dueTime = DateTime.Now.AddMilliseconds(this.Interval);
}
}
}
我希望它能帮助。
我想最好的方法是保持开始时间在一个变量,然后计算所经过的时间作为
TimeSpan t = DateTime.Now - StartTime;
不隶属于 StackOverflow