【问题标题】:Creating a button cooldown [duplicate]创建按钮冷却时间[重复]
【发布时间】:2021-05-09 11:14:47
【问题描述】:

我想知道如何创建冷却时间以防止人们向按钮发送垃圾邮件。我试过了。

timer1.Interval = 60000; // time is milliseconds lol
timer1.Start();

但每过一分钟,它就一直按自己。我想让它在冷却结束后停止。但我对冷却更感兴趣。

我正在使用 C# windows 窗体

【问题讨论】:

  • 向我们展示您的代码
  • 请解释一下“冷却”是什么意思
  • 我所说的冷却是为了防止用户按两次相同的操作而不得不等待一个时间限制

标签: c# forms winforms


【解决方案1】:

您也可以使用异步任务来做到这一点。

private bool inCooldown = false;
private async void button1_Click(object sender, EventArgs e)
{
    if (inCooldown)
        return;

    inCooldown = true;
    // your button click code
    await Task.Delay(6000);
    inCooldown = false;
}

您也可以使用新线程,但这取决于系统资源。

private bool inCooldown = false;
private void button1_Click(object sender, EventArgs e)
{
    if (inCooldown)
        return;

    inCooldown = true;
    Task.Run(async () =>
    {
        await Task.Delay(6000);
        inCooldown = false;
    });
    // your button click code
}

【讨论】:

    【解决方案2】:

    您的问题有点令人困惑,但如果我理解正确,使用Stopwatch 可能是一种更简单且资源经济的方法:

    private readonly Stopwatch _stopwatch = new Stopwatch();
    private const int _myCoolDown = 60000;
    
    private void Button_Click(object sender, EventArgs e) {
        if (!_stopwatch.IsRunning || _stopwatch.ElapsedMilliseconds > _myCoolDown) {
            _stopwatch.Start();
            _stopwatch.Reset();
            // do button click work here
        }
    }
    

    您可以在构造函数或其他地方调用 Start(),我在按钮单击时使用它以在第一次单击后开始。

    秒表类的更多信息:https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.stopwatch?view=net-5.0

    【讨论】:

    • 我正在使用带有计时器的 Windows 窗体
    • 这也适用于winforms,实际上我强烈建议使用Stopwatch 而不是Timer,因为Timer 会在线程中使用更多系统资源。
    • 此外,Stopwatch 可以更好地实现您正在寻找的行为,因为正如您所经历的那样,如果您不停止它,Timer 将持续触发。另一方面,Stopwatch 只会在实际单击按钮时执行某些操作。
    【解决方案3】:

    我用一个简单的脚本解决了我的问题:

    timer1.Interval = 60000; // here time in milliseconds  // 1 minute = 60000 milliseconds
    timer1.Tick += timer1_Tick;
    timer1.Start();
    button4.Enabled = false;
    

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Stop();
        button4.Enabled= true;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2016-08-17
      • 1970-01-01
      • 2021-05-15
      • 2021-06-17
      • 2021-02-16
      • 2020-06-27
      • 2021-05-02
      • 2021-04-21
      相关资源
      最近更新 更多