如何在C#中的特定时间生成警报?

如何在特定时间生成事件? 例如,假设我想在上午8:00生成警报,通知我上午8:00(或在任何给定时间通知我当前时间的事件)。

使用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和之后每24小时调用一次。

请参阅此SO问题,了解如何计算下一个上午8:00的事件。

详细说明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中)生成警报。 您可能需要编写一个小程序,从主应用程序的数据文件中收集任何信息。

使用此方法有几个主要好处:

  1. 您不必编写任何代码来支持该function。 您可以使用操作系统中内置的内容。 该示例适用于Windows,但其他操作系统具有相同的function。 您可以将开发和支持工作集中在自己的代码上。
  2. 您的主应用程序无需运行即可触发任务。
 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