最简单的延迟方式

pur*_*dox 1 .net c#

什么是在不必延迟主线程的情况下延迟函数内部的最简单/最简单的方法?
我正在尝试做的是这样的:

    private void FallingToggle(bool a)
    {
        a = true;
        Thread.Sleep(1000);
        a = false;
    }
Run Code Online (Sandbox Code Playgroud)

但我发现它冻结了整个程序.
有没有解决的办法?或者有更简单的方法来解决这个问题吗?

小智 6

回应您的评论,您可以通过多种方式实现您的目标.

一种方法是记录第一次动作发生的时间(这可以通过使用来实现DateTime.Now).然后,如果在记录时间的一秒内发生任何后续动作,则立即返回.例:

DateTime lastActionTime = DateTime.Now;

// ...

if ((DateTime.Now - lastActionTime).Milliseconds < 1000)
{
    // Too soon to execute the action again
    return;
}

// Do whatever the action does...
Run Code Online (Sandbox Code Playgroud)

另一种方法是在你想要禁用按钮一秒钟的情况下使用a Timer(.NET Framework中有几个定时器,我在这里使用Winforms版本).一旦操作发生,您将禁用按钮或其他UI元素,然后Timer以一秒的间隔启动一个.一旦计时器关闭,您可以重新启用UI元素,允许用户再次执行操作.例:

// In a constructor or something
timer = new System.Windows.Forms.Timer();
timer.Interval = 1000; // 1000 milliseconds
timer.Tick += (s, e) => 
{
    button.Enabled = true;
    timer.Stop();
};

// ...

void OnButtonClick()
{
    button.Enable = false;
    timer.Start();

    // Do whatever the button does...
}
Run Code Online (Sandbox Code Playgroud)

后者是你在GUI中使用的,前者可以用在类似游戏的东西上.