時間が経過するまでの残りを取得する方法で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歳であることを、認識しています。しかし、私は正確に同じ問題に取り組む一方で、それに出くわしました。
サミュエル・ネフに触発され、私は標準で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