1

在函数内部延迟而不延迟主线程的最简单/最简单的方法是什么?
这就是我想要做的与此类似:

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

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

4

2 回答 2

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...

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

后者是您将在 GUI 中使用的内容,前者可以用于类似游戏的内容。

于 2012-06-15T04:12:16.730 回答
0

这是方法..

在函数调用事件之后a = true;启动一个新线程。并放

Thread.Sleep(1000);
    a = false;  

在新线程中。

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

于 2012-06-15T04:11:19.480 回答