最简单的延迟方式

时间:2012-06-15 03:20:46

标签: c# .net

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

    private void FallingToggle(bool a)
    {
        a = true;
        Thread.Sleep(1000);
        a = false;
    }

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

2 个答案:

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

另一种方法是,如果要禁用按钮一秒钟,则使用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...
}

后者是您在GUI中使用的,前者可以用于游戏等。

答案 1 :(得分:0)

这是方式..

a = true;启动新线程后的函数调用事件中。并把

Thread.Sleep(1000);
    a = false;  

在新主题中。

我认为这是最简单的方法。