我需要有关C#中的计时器的建议吗?

时间:2019-01-05 22:51:49

标签: c# timer

我正在使用c#设置图书馆系统,该系统包含以下内容:

学生可以远程预订书籍,但是此预订操作仅在24小时内有效。如果该成员在该期限内未出现,该书籍将自动发布,并且如果重复3次,将被禁止15天。

为此,我开始设置一个计时器(使用System.Threading.Timer),但是每当学生预订一本书时,我都需要一个计时器,而我确实对如何执行此操作感到困惑。我有创建计时器列表的想法,每次进行预订操作时,我都会创建一个计时器并将其放入列表中。

    private List<Timer> timerList;
    private void SetUpTimer(TimeSpan alertTime)
    {
        DateTime current = DateTime.Now;
        TimeSpan timeLeft = alertTime - current.TimeOfDay;
        Timer timer = new System.Threading.Timer(x =>
        {
            this.doWork();
        }, null, timeLeft, Timeout.InfiniteTimeSpan);
     timerList.Add(timer);
     }

    private void doWork()
    {
    }

这是实现该想法的好方法吗?

有没有更好的主意来实现这一点?

编辑1:每次预订一本书时,我都会使用数据库存储所有信息和时间戳。

3 个答案:

答案 0 :(得分:0)

我无法评论:(

我认为,正如其他人提到的那样,这不是一个好的设计。最好是事件驱动。又名在检查书籍是否可用时,请确定天气在24小时内有人将其锁定。

用户A可以锁定一本书1,并且您可以将此信息保存到某处,如user2864740所指,带有时间戳记(在C#DateTime中)。例如: 书1:2019-01-05 15:00

稍后,可能会发生4种情况: 1.借款人准时来 2.借款人来晚了 3.有人来得比较早,尝试把这本书签出来 4. 24小时后有人来找本书

每个人都可以视为一件大事。

这里的想法在软件中非常笼统:不要打电话给我(提供我可能会/可能不需要的信息),需要时我会打电话给你。

希望这会有所帮助。

因此,如果您要开发一些管理系统,最好从数据库开始。如果只是做完课后练习,您甚至可以使用文件系统,并查看如何在C#中使用与IO相关的类。

玩得开心!

答案 1 :(得分:0)

  1. 创建Windows服务

  2. 该服务将每1m查询一次数据库并更新预订表

                                  +----------------------+
                                  |                      |
                                  |                      |
                                  |    +---------+       |
    +-------------+         book  |    |         |       |
    |             +----------------->  |  Data   |       |
    |   User      |               |    |  Base   |       |
    |             |               |    |         |       |
    +-------------+               |    +-----+---+       |
                                  |          ^           |
                                  |          | check     |
                                  |     +----+----+      |
                                  |     |         |      |
                                  |     |         |      |
                                  |     | Windows |      |
                                  |     | Service |      |
                                  |     |         |      |
                                  |     +---------+      |
                                  |                      |
                                  |                      |
                                  |                      |
                                  +----------------------+
    
                                         server
    

答案 2 :(得分:0)

我建议您重新考虑您的问题和解决方案。 如果学生在同一天预订多个物品(比如说5个),却从来没有来预订这些物品,该怎么办?系统是否应禁止该人不收集他的5件物品?还是应该算作1个预订?

对于解决方案,我将建议一个模型,该模型将在一天的其余时间+ 24小时内预订该项目。然后,您可以将预订添加到数据库中的表中,并在学生收集项目时将其删除。在这种情况下,您每天只能检查一次预订表,并在需要时取禁学生。