有时间到下一个活动

时间:2013-03-06 12:51:19

标签: c#

我的应用程序中有一个同步计时器,它在给定时间启动一个函数...现在我想知道在下一次调用该函数之前还剩多少时间。

这是我对计时器的调用:

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();  

如何获得下次通话的时间?

由于

2 个答案:

答案 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;