1

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

这是我对计时器的调用:

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

我如何获得下一个电话的时间?

谢谢

4

2 回答 2

0

您可以使用 aSystem.Diagnostics.Stopwatch来跟踪已经过去了多少时间,并StopwatchTimer.

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;
于 2013-03-06T13:20:09.880 回答
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;
        }
于 2013-03-06T12:55:18.250 回答