C# 拖延的最简单方法
在函数内部延迟而不必延迟主线程的最简单/最简单的方法是什么? 这是我正在尝试做的,与此类似:C# 拖延的最简单方法,c#,.net,C#,.net,在函数内部延迟而不必延迟主线程的最简单/最简单的方法是什么? 这是我正在尝试做的,与此类似: private void FallingToggle(bool a) { a = true; Thread.Sleep(1000); a = false; } 但我发现它冻结了整个程序。 有办法解决这个问题吗?还是有更简单的方法来解决这个问题?这是一种方法 在函数调用事件中,a=true之后;开始一个新的线程。放 Thread.S
private void FallingToggle(bool a)
{
a = true;
Thread.Sleep(1000);
a = false;
}
但我发现它冻结了整个程序。
有办法解决这个问题吗?还是有更简单的方法来解决这个问题?这是一种方法
在函数调用事件中,a=true之后;开始一个新的线程。放
Thread.Sleep(1000);
a = false;
在新的线程中
我认为这是最简单的方法。这是方法
在函数调用事件中,a=true之后;开始一个新的线程。放
Thread.Sleep(1000);
a = false;
在新的线程中
我认为这是最简单的方法。回应您的评论,有很多方法可以实现您正在尝试的目标 一种方法是记录动作第一次发生的时间,这可以通过使用来实现。然后,如果在记录时间的1秒内发生任何后续操作,请立即返回。例如:
DateTime lastActionTime = DateTime.Now;
// ...
if ((DateTime.Now - lastActionTime).Milliseconds < 1000)
{
// Too soon to execute the action again
return;
}
// Do whatever the action does...
// 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秒内发生任何后续操作,请立即返回。例如:
DateTime lastActionTime = DateTime.Now;
// ...
if ((DateTime.Now - lastActionTime).Milliseconds < 1000)
{
// Too soon to execute the action again
return;
}
// Do whatever the action does...
// 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中使用的,前者可以用于类似游戏的东西。此代码表明您的项目存在严重的设计缺陷,您应该重新考虑是否需要任意睡眠1000分钟。你想做什么?这确实是最简单的延迟方法,也是同步延迟的唯一通用方法。但是,如图所示,这确实阻止了当前线程。否则,请考虑移动到异步模式,例如计时器和回调。您能解释一下为什么要这样延迟吗?这有点可疑。我之所以使用这种函数,是因为我想限制用户运行函数的频率,例如,消除用户在消息传递程序中滥发发送按钮。您需要创建一个计时器,并在勾选事件时禁用发送代码/按钮。此代码表明您的项目存在严重的设计缺陷,你应该重新考虑是否需要任意睡1000个小时。你想做什么?这确实是最简单的延迟方法,也是同步延迟的唯一通用方法。但是,如图所示,这确实阻止了当前线程。否则,请考虑移动到异步模式,例如计时器和回调。您能解释一下为什么要这样延迟吗?我之所以使用这种函数,是因为我想限制用户运行函数的频率,例如,消除用户在消息传递程序中滥发发送按钮。您需要创建一个计时器,并在勾选事件时禁用不发送的代码/按钮。不应使用thread.sleep。“mgbowen”在回答中提供的计时器选项和禁用按钮选项是一个更好的设计。不应该使用thread.sleep。“mgbowen”在回答中提供的定时器选项和禁用按钮选项是一个更好的设计。