创建按钮冷却时间

时间:2021-02-05 04:52:19

标签: c# forms winforms

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

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

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

我正在使用 C# windows 窗体

3 个答案:

答案 0 :(得分:3)

您也可以使用异步任务来完成。

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
}

答案 1 :(得分: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

答案 2 :(得分:0)

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

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;
}