【问题标题】:c# recurring event (like for a calendar) [closed]c#重复事件(如日历)[关闭]
【发布时间】:2012-02-04 00:56:16
【问题描述】:

我一直在尝试设计对重复事件的支持(就像您在 Outlook 或任务管理器等中看到的那样)。我一直在对 Google 和 StackOverflow 进行大量挖掘,但运气不佳。

想知道是否有人有任何指针或资源。

“要求”

  • 支持每日活动(周一、周二、周四上午 10 点每 15 分钟发生一次)
  • 每月活动

任何额外的都是奖励,但这些将是最低限度的。

谢谢!

【问题讨论】:

  • 您想要一个 Outlook 解决方案或只是管理重复事件的一般解决方案?一些事件的例子会有所帮助。

标签: c# oop calendar logic


【解决方案1】:

我使用的是内置的 TaskScheduler。这里有一个易于使用的包装器:http://taskscheduler.codeplex.com/

如果您还没有,请在开始菜单中搜索任务计划程序并使用它。该包装器本质上允许您以编程方式使用 GUI 完成所有可以做的事情。

【讨论】:

  • 我喜欢这个想法并将其标记为答案,因为我认为它引领着我想要去的方向 - 谢谢!
【解决方案2】:

【讨论】:

    【解决方案3】:

    Bob 为this question 给出的答案非常好。他的解决方案基于 SQL Server 团队在 sysschedules 方面的工作。

    http://technet.microsoft.com/en-us/library/ms178644.aspx.

    【讨论】:

      【解决方案4】:

      检查iCal WikiiCal RFC(尤其是“持续时间”和“重复规则”部分)。我认为它将为您提供一些关于如何表示此类事件的良好起点。

      RFC 节选:

       ... For example "the last work day of the month" could be represented as:
         FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1
      

      【讨论】:

      • 是否有数据库模式来帮助持久化和检索此类信息
      【解决方案5】:

      如果您尝试解决的问题是您只能在程序运行时响应此类事件,那是正确的。这个问题最实用的解决方案是在后台运行你的程序,通常在任务栏上带有一个通知图标。

      如果问题是您不确定如何跟踪此类事件,您可以使用现有框架(请参阅 roken 的答案)、设置计时器(研究 System.Threading.Timer),或定期将 DateTime.Now 与各种 DateTime 进行比较对象。对于后两者,您需要序列化 ​​DateTime 对象以在会话之间将它们保存到磁盘。

      【讨论】:

      • 谢谢!我正在寻找跟踪事件的方法(即为事件创建记录并将其保存在数据库中(带有重复信息)。我刚刚下载了 Quartz,现在将查看它。
      • 我可能会通过使用 BinaryFormatter 序列化 DateTime 对象的 Dictionary/List 来解决问题,然后在每次程序启动时设置计时器。
      猜你喜欢
      • 2010-11-10
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多