在一天中的特定时间举办活动的好方法?

Pau*_*ulB 5 c# events

我有一个应用程序需要在白天的某些时间发起几个事件 - 时间都由用户定义.我可以想到几种方法,但没有一种方法可以做得太好.时间不一定是特别高的分辨率 - 每一分钟左右都很好.

我的想法:

  1. 当应用程序启动时,所有时间都会读取并启动计时器,这将在适当的时间打勾

  2. 关闭计时器,每分钟检查'当前事件'

为任何更好的解决方案.

Ste*_*sop 4

  • 按下次需要关注的时间排序的事件进行存储/索引。这可能在内存中,也可能不在内存中,具体取决于有多少个事件、更改的频率等。如果所有事件每天触发一次,则此列表基本上是一个循环缓冲区,仅当用户更改其事件时才会更改。
  • 启动一个计时器,该计时器将在列表开头的事件发生时“滴答”。如果您愿意,可以四舍五入到下一分钟。
  • 当计时器触发时,处理现在已经过去的所有事件[编辑 - 以及尚未处理的事件],如有必要,将它们重新插入列表中(即,如果您没有“循环缓冲区”优化) ),并设置一个新的计时器。

显然,当您更改事件集或更改现有事件的时间时,您可能需要重置计时器以使其更早触发。通常稍后将其重新启动是没有意义的 - 您也可以让它关闭而不执行任何操作。如果您将计时器运行时间的上限设置为一分钟(或者只有一个 1 分钟循环计时器),那么您无需重置即可获得 1 分钟精度。这基本上就是你的选择2。

可以说,您应该使用现有的框架,而不是自行构建,但我不懂 C#,所以我不知道有什么可用的。我通常对设置数十个计时器的想法有点谨慎,因为某些环境不支持它(或者不能很好地支持它)。因此这个方案只需要一个。我不知道 C# 在这方面是否有任何问题,但如果需要,这个方案可以很容易地安排使用 O(1) RAM,这是无可比拟的。