我的应用程序中有一个计时器正在运行,我想根据当地时间停止和启动。所以我需要这样的东西:
if ( time = 08:00) {StartTimer();}
If ( time = 18:00) {StopTimer();} //This can be done from the timer event itself
有没有办法在不使用另一个计时器的情况下做到这一点?我可以从计时器事件本身中停止计时器,但我将如何重新启动它?
您可以将计时器的间隔设置为 14 小时,而不是停止它,或者让它以短间隔运行并在内部检查其他条件(一天中的时间)。
你可以试试这个: -
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();
}
}
您可以创建一个每秒滴答的线程。
在那里您可以检查是否要启动或停止计时器。
阅读以下内容:线程。
在您的线程中添加如下内容:
if (CurrentTime == "08:00")
StartTimer();
else if if (CurrentTime == "18:00")
StopTimer();
Thread.Sleep(1000); // Makes the Thread Sleep 1 Second
由于您至少需要一个始终运行的计时器(以检测早上 8 点的时间),因此您可以只使用一个全天运行的计时器。
每当计时器滴答作响时,请检查时间。如果它不在 0800 和 1800 之间,则无需执行任何操作就返回并等待下一个滴答声。
您可以尝试将计时器间隔增加到使您达到例如 17:55 的值,然后再次减小它,但不会有任何可测量的性能差异,因此恕我直言,这是无益的工作。