【问题标题】:How to add a 3 second delay in C#?如何在 C# 中添加 3 秒延迟?
【发布时间】:2017-03-20 07:10:48
【问题描述】:

我刚开始编写 c#,我正在为我的 discord 服务器制作一个 Bot。我最近添加了一个命令 !meme,它会从大约 100 张不同的图片中随机提取并发送到聊天中。在我执行这个命令的那一刻,每个人都完全滥用了它,而且由于 !meme 垃圾邮件,每 2 秒就有大约 15 张图片在聊天中弹出。

我希望能够在命令本身可以再次使用之前添加 3 秒延迟。我尝试使用Thread.Sleep(3000);,但没有奏效。相同的 await Task.Delay(3000); 我在异步内部使用。

       private void RegisterMemeCommand()
    {
        commands.CreateCommand("Meme")
            .Do(async (e) =>
            {
                int RandomMeme = rng.Next(MemeList.Length);
                string memetopost = MemeList[RandomMeme];
                await e.Channel.SendFile(memetopost);
            });
    }

【问题讨论】:

  • 什么意思?
  • 是的,我有,没有完全粘贴。
  • 记录最后一次使用该命令的时间。当有人再次使用它时,将当前时间与那个时间进行比较。如果不超过三秒,不执行命令
  • 它不起作用,因为什么也没发生。没有错误,只是没有冷却时间,人们可以继续发送垃圾邮件。
  • @EricLippert 你能输入一下吗?因为我不知道如何获取当前时间,或者如果这段时间没有过去,那么不要执行

标签: c# delay


【解决方案1】:

由于我没有完整的代码,所以根据您的问题,试试这个:

var lastSentOn=DateTime.MinValue;
commands.CreateCommand("Meme")
.Do(async (e) =>
{
    if((DateTime.Now - lastSentOn).TotalSeconds > 3)
    { 
        int RandomMeme = rng.Next(MemeList.Length);
        string memetopost = MemeList[RandomMeme];
        lastSentOn = DateTime.Now;
        await e.Channel.SendFile(memetopost);
    }
});

您可能需要将 lastSentOn 与一些用户 ID 等相关联。字典在这种情况下会有所帮助。

【讨论】:

  • 感谢@mike z,提供更合适的属性。
  • 它给了我一堆错误。我编辑了我的帖子以添加更多代码,不确定它是否会改变任何东西。说时间缺少等待操作符,说“时间”在当前上下文中不存在,并且说 ToString 缺少等待操作符。另外,我之前工作的 await 现在说它只能与异步方法一起使用。
  • @JohnLandon 好的,所以删除该行。我已经在这个答案中做到了。 time 的使用只是因为您将其包含在问题中。
  • 感谢@mikez 的纠正。我被困在一个会议中:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多