如何在特定时间生成活动?例如,假设我想在上午8:00生成警报,通知我上午8:00(或在任何给定时间通知我当前时间的事件)。
答案 0 :(得分:46)
var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));
callback
代表将在下次上午8:00和之后每24小时调用一次。
请参阅this SO question如何计算下一个上午8:00的事件。
答案 1 :(得分:9)
详细说明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");
}
答案 2 :(得分:1)
您的程序是否必须生成警报?另一种方法是使用Scheduled Task (in Windows)生成警报。您可能需要编写一个小程序,从主应用程序的数据文件中收集任何信息等。
使用这种方法有几个主要好处:
答案 3 :(得分:0)
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