在函数内部延迟而不延迟主线程的最简单/最简单的方法是什么?
这就是我想要做的与此类似:
private void FallingToggle(bool a)
{
a = true;
Thread.Sleep(1000);
a = false;
}
但我发现它冻结了整个程序。
有没有解决的办法?还是有更简单的方法来解决这个问题?
回应您的评论,有很多方法可以实现您尝试做的事情。
一种方法是记录动作第一次发生的时间(这可以使用 来实现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 中使用的内容,前者可以用于类似游戏的内容。
这是方法..
在函数调用事件之后a = true;
启动一个新线程。并放
Thread.Sleep(1000);
a = false;
在新线程中。
我认为这是最简单的方法。