题
我怎样才能生成在特定时间的事件?例如,假设我要产生在上午8点,通知我的8:00 AM警报(或在任何给定的时间告诉我的当前时间的事件)。
解决方案
使用 System.Threading.Timer 一>类:
var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));
在callback
代表将被称为它的其后8:00 AM和每24小时的下一次。
请参阅该SO质疑如何计算下一8:00 AM发生。
其他提示
这是DTB的回答阐述,这是我如何实现它。
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);
//first occurrence at
var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
if (DateTime.Now < dt)
{
var timer = new System.Threading.Timer(callback, null,
//other occurrences every 24 hours
dt - DateTime.Now, TimeSpan.FromHours(24));
}
}
private void ProcessTimerEvent(object obj)
{
MessageBox.Show("Hi Its Time");
}
警报是否必须由您的程序生成?另一种方法是使用一个计划任务(在视窗)生成警报。您可能需要写一个小程序,它从主应用程序的数据文件等收集的任何信息。
有几个主要优点,使用这种方法:
- 您不必编写任何代码来支持该功能。你利用内置于操作系统的东西。这个例子是Windows,但其他操作系统具有相同的功能。您可以集中精力开发和支持工作在自己的代码。
- 您的主应用程序不必运行的任务火。 醇>
private void Run_Timer()
{
DateTime tday = new DateTime();
tday = DateTime.Today;
TimeSpan Start_Time = new TimeSpan(8,15,0);
DateTime Starter = tday + Start_Time;
Start_Time = new TimeSpan(20, 15, 0);
DateTime Ender = tday + Start_Time;
for (int i = 0; i <= 23; i++)
{
Start_Time = new TimeSpan(i, 15, 0);
tday += Start_Time;
if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
{
Time_To_Look = tday;
timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
timer1.Start();
MessageBox.Show(Time_To_Look.ToString());
break;
}
}
}
我们可以使用该功能用于获取计时器的时间运行或更改为在一个特定时间运行:d
不隶属于 StackOverflow