我的应用程序中有一个同步计时器,它在给定时间启动一个函数...现在我想知道在下一次调用该函数之前还剩多少时间。
这是我对计时器的调用:
var syncTime = time.activitylog;
double time = TimeSpan.Parse(syncTime).TotalMilliseconds;
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
myTimer.Interval = time;
myTimer.Start();
如何获得下次通话的时间?
由于
答案 0 :(得分:0)
您可以使用另一个计时器,并设置所需值的间隔,恰好是原始计时器间隔的间隔时间。 然后开始他们同时,我的意思是同时。
更新:
也许这段代码更好地描述了我的解决方案:
public Form1()
{
InitializeComponent();
}
System.Windows.Forms.Timer trOriginal = new System.Windows.Forms.Timer();
System.Windows.Forms.Timer trRemain = new System.Windows.Forms.Timer();
double remain = 0;
private void button1_Click(object sender, EventArgs e)
{
trOriginal.Interval = 1000;
trRemain.Interval = 1;
trOriginal.Tick += new EventHandler(trOriginal_Tick);
trRemain.Tick += new EventHandler(trRemain_Tick);
trOriginal.Start();
trRemain.Start();
}
void trRemain_Tick(object sender, EventArgs e)
{
remain -= trRemain.Interval;
Console.WriteLine("remain MS to next event : " + remain);
}
void trOriginal_Tick(object sender, EventArgs e)
{
remain = trOriginal.Interval;
}
答案 1 :(得分:0)
您可以使用System.Diagnostics.Stopwatch
跟踪已经过了多长时间,并在Stopwatch
的每个时间点重新启动Timer
。
Stopwatch watch = new Stopwatch();
private void DisplayTimeEvent(object sender, EventArgs e)
{
watch.Restart();
// Whatever is supposed to happen, when the timer ticks
}
现在,只要您想知道在下次触发事件之前剩下多少时间,您就可以这样做:
long timeLeft = myTimer.Interval - watch.ElapsedMilliseconds;