什么是在不必延迟主线程的情况下延迟函数内部的最简单/最简单的方法?
我正在尝试做的是这样的:
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中使用的,前者可以用在类似游戏的东西上.