首页 > 解决方案 > 我需要关于 c# 中计时器的建议吗?

问题描述

我正在使用 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:每次预订一本书时,我都使用数据库来放置所有信息和时间戳。

标签: c#timer

解决方案


我无法评论:(

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

IE

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

之后,可能会发生 4 件事:1. 借款人准时来 2. 借款人迟到 3. 有人来得早,试图借阅这本书 4. 有人晚 24 小时来,试图借阅这本书

每一个都可以被认为是一个事件。

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

希望这可以帮助。

所以如果你正在开发一些管理系统,最好从数据库开始。如果只是课后练习,你甚至可以使用文件系统,查看如何在 C# 中使用 IO 相关类。

玩得开心!


推荐阅读