4

我的应用程序中有一个计时器正在运行,我想根据当地时间停止和启动。所以我需要这样的东西:

if ( time = 08:00) {StartTimer();}
If ( time = 18:00) {StopTimer();} //This can be done from the timer event itself

有没有办法在使用另一个计时器的情况下做到这一点?我可以从计时器事件本身中停止计时器,但我将如何重新启动它?

4

4 回答 4

2

您可以将计时器的间隔设置为 14 小时,而不是停止它,或者让它以短间隔运行并在内部检查其他条件(一天中的时间)。

于 2012-10-24T08:22:48.957 回答
1

你可以试试这个: -

1) 创建一个控制台应用程序,它可以满足您的需求。

2) 使用 Windows“计划任务”功能在您需要运行该控制台应用程序时执行它

或者

你也可以看看这个例子:-

   using System;
   using System.Threading;

    public class TimerExample {

// The method that is executed when the timer expires. Displays
// a message to the console.
private static void TimerHandler(object state) {

    Console.WriteLine("{0} : {1}",
        DateTime.Now.ToString("HH:mm:ss.ffff"), state);
}

public static void Main() {

    // Create a new TimerCallback delegate instance that 
    // references the static TimerHandler method. TimerHandler 
    // will be called when the timer expires.
    TimerCallback handler = new TimerCallback(TimerHandler);

    // Create the state object that is passed to the TimerHandler
    // method when it is triggered. In this case a message to display.
    string state = "Timer expired.";

    Console.WriteLine("{0} : Creating Timer.",
        DateTime.Now.ToString("HH:mm:ss.ffff"));

    // Create a Timer that fires first after 2 seconds and then every
    // second.
    using (Timer timer = new Timer(handler, state, 2000, 1000)) {

        int period;

        // Read the new timer interval from the console until the
        // user enters 0 (zero). Invalid values use a default value
        // of 0, which will stop the example.
        do {

            try {
                period = Int32.Parse(Console.ReadLine());
            } catch {
                period = 0;
            }

            // Change the timer to fire using the new interval starting
            // immediately.
            if (period > 0) timer.Change(0, period);

        } while (period > 0);
    }

    // Wait to continue.
    Console.WriteLine("Main method complete. Press Enter.");
    Console.ReadLine();
}
}
于 2012-10-24T08:20:37.560 回答
1

您可以创建一个每秒滴答的线程。

在那里您可以检查是否要启动或停止计时器。

阅读以下内容:线程

在您的线程中添加如下内容:

if (CurrentTime == "08:00")
   StartTimer();
else if  if (CurrentTime == "18:00")
   StopTimer();
Thread.Sleep(1000); // Makes the Thread Sleep 1 Second
于 2012-10-24T08:21:39.263 回答
1

由于您至少需要一个始终运行的计时器(以检测早上 8 点的时间),因此您可以只使用一个全天运行的计时器。

每当计时器滴答作响时,请检查时间。如果它不在 0800 和 1800 之间,则无需执行任何操作就返回并等待下一个滴答声。

您可以尝试将计时器间隔增加到使您达到例如 17:55 的值,然后再次减小它,但不会有任何可测量的性能差异,因此恕我直言,这是无益的工作。

于 2012-10-24T08:23:12.313 回答