gpt4 book ai didi

c# - 如果经过 3 秒,方法只能再次调用

转载 作者:行者123 更新时间:2023-11-30 19:01:21 24 4
gpt4 key购买 nike

我想实现一些方法来防止一个方法被立即调用多次。例如想象一下,如果我有一个像这样的类:

class Example
{
public void MyFunction()
{
// do something
}
}

用户可以调用 MyFunction,但前提是自上次调用后已过去 3 秒。如果在 3 秒之前调用它,则不应发生任何事情(应忽略调用)。

我该怎么做?

编辑:

我不想使用 Thread.Sleep。我正在考虑使用 System.Timer 中的 Timer 类。但不知道我将如何使用它来满足我的需要。

最佳答案

我认为这里不需要使用计时器。您可以使用 Stopwatch :

class Example
{
private static readonly TimeSpan MinInterval = TimeSpan.FromSeconds(3);
private readonly Stopwatch stopwatch = new Stopwatch(); // Stopped initially

public void MyFunction()
{
if (stopwatch.IsRunning && stopwatch.Elapsed < MinInterval)
{
return;
}
try
{
// Do stuff here.
}
finally
{
stopwatch.Restart();
}
}
}

请注意,这不是线程安全的...多个线程可以同时在同一个实例上执行该方法。虽然每个实例都使用一个单独的秒表,因此可能有多个实例被多个线程使用 - 如果你想禁止调用所有实例,你会想要为秒表使用一个静态字段,并且一定要添加锁定以安全地访问它。

另请注意,虽然您可以使用 DateTime 来检测上次执行时间,但如果用户更改系统时钟,这很容易出错。

这里使用try/finally 是为了避免快速连续的多次调用由于抛出异常而失败。同样,这可能不是您想要的...您应该考虑是否确实希望秒表在通话失败时重置。

关于c# - 如果经过 3 秒,方法只能再次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com